根据aio_read/write上的文档,AIO库基本上有两种方式可以通知您的应用程序异步文件I/O操作已完成.要么1)你可以使用信号,2)你可以使用回调函数
我认为回调函数比信号更受欢迎,并且可能更容易集成到更高级别的多线程库中.不幸的是,至少可以说这个功能的文档很乱.某些源(例如sigevent结构的手册页)指示您需要将sigevent结构中的sigev_notify数据成员设置为SIGEV_CALLBACK,然后提供函数处理程序.据推测,处理程序在同一个线程中调用.其他文档表明您需要将sigev_notify设置为SIGEV_THREAD,它将在新创建的线程中调用回调处理程序.
在任何情况下,在我的Linux系统(带有2.6.28内核的Ubuntu)上,SIGEV_CALLBACK似乎没有在任何地方定义,但SIGEV_THREAD的工作方式与广告一样.不幸的是,创建一个新线程来调用回调处理程序似乎效率很低,特别是如果你需要调用许多处理程序.最好使用现有的线程池,类似于大多数网络I/O事件多路分解器的工作方式.有些版本的UNIX,如QNX,包括SIGEV_SIGNAL_THREAD标志,它可以让您调用使用指定的现有线程处理器,但是这似乎并没有提供在Linux上,也不显得甚至是POSIX的一部分标准.
那么,是否可以以在预先分配的后台线程/线程池中调用用户处理程序的方式使用POSIX AIO库,而不是每次调用处理程序时创建/销毁新线程?
在散列数据库存储密码时,我总是使用正确的每个条目的盐字符串.根据我的需要,将盐存储在哈希密码旁边的数据库中一直运行正常.
但是,有些人建议将盐与数据库分开存储.他们的论点是,如果数据库受到攻击,攻击者仍然可以构建一个彩虹表,将一个特定的盐字符串考虑在内,以便一次破解一个帐户.如果此帐户具有管理员权限,那么他甚至可能不需要破解任何其他帐户.
从安全角度来看,将盐储存在不同的地方是否值得?考虑在同一台机器上具有服务器代码和DB的Web应用程序.如果盐存储在该机器上的平面文件中,则很可能如果数据库受到损害,则salt文件也是如此.
有什么建议的解决方案吗?
我一直在用JavaScript编写游戏,现在是时候让它成为多人游戏了.我想使用AJAX长轮询来获得当前的游戏状态,以及实现大厅.
服务器只需要执行基本功能,比如将游戏状态存储在mysql数据库中,检索游戏状态,并格式化记分板.
我认为用PHP编写它是最简单的,但由于它会产生的apache进程数量,这将是一个坏主意.
您有什么推荐的吗?我正在寻找最直接的方法.
编辑:StreamHub似乎很好,但社区版只允许10个并发用户.
我有两张桌子想加入.
我想要类别表中的所有类别以及category_subscriptions表中用户订阅的所有类别.
基本上这是我目前的查询:
SELECT *
FROM categories
LEFT JOIN user_category_subscriptions
ON user_category_subscriptions.category_id = categories.category_id
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我想在查询的末尾添加一个where子句,然后基本上使它成为内部/ equi连接.
SELECT *
FROM categories
LEFT JOIN user_category_subscriptions
ON user_category_subscriptions.category_id = categories.category_id
WHERE user_category_subscriptions.user_id = 1
Run Code Online (Sandbox Code Playgroud)
如何仅使用一个查询获取特定用户订阅的所有类别以及所有类别?
category_id是类别表和user_category_subscriptions中的键.user_id驻留在user_category_subscriptions表中.
谢谢
我输入的文字包含'喜欢这篇文章'弗兰克的卷轴电影评论"
我怎么摆脱''
我试过了
.replace (/\'/ig, '');
.replace ('\'', '');
Run Code Online (Sandbox Code Playgroud)
但似乎'现在想删除...
我在想'可能编码的utf-8或其他东西
有任何想法吗
我在Mono for OSX上的GTK#中迈出了我的第一步(或许我的最后一步).我写了一个.cs文件,然后尝试用mono编译:
gmcs -pkg:gtk-sharp-2.0 one.cs
Run Code Online (Sandbox Code Playgroud)
这导致了这条消息
error CS8027: Couldn't run pkg-config: ApplicationName='pkg-config', CommandLine='--libs gtk-sharp-2.0', CurrentDirectory=''
Run Code Online (Sandbox Code Playgroud)
显然,这会要求我知道我在做什么.我知道
Mono的MacOS X安装程序附带Gtk +和Gtk#,因此您可以开始构建和运行包含OSX的跨平台GUI Gtk#应用程序."
所以没有什么可以安装的.
我在这里找到了GTK2
/opt/local/var/macports/sources/rsync.macports.org/release/ports/x11/gtk2/
Run Code Online (Sandbox Code Playgroud)
这是Mono安装肯定安装的.
Gmcs版本是2.4.2.2.
编辑:米格尔说我的道路上有一些奇怪的东西.
我按照Macports说明移除了所有Macport.我从.dmg重新安装了Mono.这是我目前的路径
export PATH=/opt/subversion:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin
Run Code Online (Sandbox Code Playgroud)
但即使只使用/ usr/bin,它仍然无法避免错误.
所有单声道的东西都应该是它应有的地方,包括所有的东西/Library/Frameworks/Mono.framework/Versions/Current
.但是:很奇怪
/Library/Frameworks/Mono.framework/Versions/2.4.2.2/lib/gtk-sharp-2.0/
Run Code Online (Sandbox Code Playgroud)
是空的.但MonoDevelop运行,但不知道Gtk(我已经包含了它知道的所有引用)...
我最近发现有些东西编译(不确定它是否合法).我需要这样的事情:我的项目输出选定拱门的机器代码(可能与运行程序的拱门相同或不同).所以,我想最多支持64位架构现在(同时也支持现有的32个和16位archs.)我目前的解决方案是NEW_STATE的"基地"以只是一个uint64_t中,并手动铸造16位和32位的需要.虽然,我发现你可以在函数参数中编译联合.所以这个函数编译:
int pcg_new_state(pcg_state *s,int arch,void *mem,int sz,
union{
uint16_t b16;
uint32_t b32;
uint64_t b64;
}base ,int self_running);
Run Code Online (Sandbox Code Playgroud)
虽然这种事情是"合法的"或者是否受到任何其他编译器的支持?而且,我无法弄清楚如何在不创建联合的情况下调用此函数,然后将此联合传递给new_state.
如何从进程句柄获取进程的文件名?我正在使用Win32 C++(Visual C++ Express Edition).
谢谢.
像大多数程序员一样,我不是密码学方面的专家,但我理解基础知识.然而,正如Jeff的博客文章所述,一点点知识可能是一件危险的事情.考虑到这一点,我理解盐值的目的但我需要一些帮助来理解如何使用盐值.
我已经阅读过关于这个主题的其他帖子,最好使用随机盐值来加密每个密码.如果是这种情况,当我尝试对用户进行身份验证时,如何重现该随机盐值?在这种情况下,我会加密用户提供的明文密码,对其进行加密,并将其与存储在数据库中的密码进行比较.在创建密码时,是否将随机盐值与加密密码一起存储在用户记录中?如果黑客拥有完整的用户记录,这会使盐值无用吗?