这是两个相关的问题。将它们一起发布更有意义。
问题1
我有一个node.js应用程序,它向所有客户端发出事件,所有当前客户端都将ready
发出一个响应。如何创建所有回复到初始发射的客户端的列表,以及可以使用哪种标识来区分客户端?
问题2:
在收集已连接的客户端列表之后,我想做的就是访问一个N
具有行数的MySQL数据库表,并为每个客户端X
行分配一个表。这些行将被发回给它们各自的客户端。如何才能做到这一点?
Qn 1的当前代码
节点代码
setInterval(function() {
util.log('Checking for new jobs...');
dbCheckQueue(function(results) { // checks if there are new rows to "distribute" to clients
if (results.length) {
util.log(results.length + ' new jobs found.');
io.sockets.emit('job_available');
}
});
}, 10*1000);
客户端JS代码
socket.on('job_available', function() {
console.log('Job Available.. Responding with Ready!');
socket.emit('ready');
});
io.sockets.on('connection', function(socket) {
socket.on('ready', function() {
// UPDATE N rows with client_id in column checkout.
// Then SELECTS * from table where checkout = client_id
getListings(client_id, function(listings) {
socket.emit('job', listings); // send jobs
});
});
});
Qn 2 的 当前代码 该代码适用于单个客户端,但是如何循环访问所有连接的客户端并执行相同的列更新和行选择?
io.sockets.on('connection', function(socket) {
socket.on('ready', function() {
// UPDATE N rows with client_id in column checkout.
// Then SELECTS * from table where checkout = client_id
getListings(client_id, function(listings) {
socket.emit('job', listings); // send jobs
});
});
});
您将需要自己跟踪连接的客户端。做到这一点的简单方法是使用数组:
var clients = [];
io.sockets.on('connect', function(client) {
clients.push(client);
client.on('disconnect', function() {
clients.splice(clients.indexOf(client), 1);
});
});
然后,您可以clients
在任何需要的位置,ready
事件处理程序等中引用服务器上的该数组。就像是:
io.sockets.on('connection', function(socket) {
socket.on('ready', function() {
// UPDATE N rows with client_id in column checkout.
// Then SELECTS * from table where checkout = client_id
clients.forEach(function(client, index) {
var client_id = index; // Just use the index in the clients array for now
getListings(client_id, function(listings) {
socket.emit('job', listings); // send jobs
});
});
});
});
问题内容: 我正在尝试获取当前已连接的所有套接字/客户端的列表。 不幸的是,它不返回数组。 我知道我可以使用数组保留自己的列表,但是由于以下两个原因,这并不是最佳解决方案: 冗余。Socket.IO已保留此列表的副本。 Socket.IO提供了为客户端(即:)设置任意字段值的方法,因此,如果我要维护自己的列表,则需要跟上这些更改。 救命? 问题答案: 在Socket.IO 0.7中,您在名称空间上
问题内容: 我用NodeJS,socketIO和Express中的不同聊天室制作了一个聊天客户端。我正在尝试显示每个房间的已连接用户的更新列表。 有没有一种方法可以将用户名连接到对象,以便在执行操作时可以看到所有用户名: 然后执行以下操作: 我还可以通过其他方式做到这一点? 解决: 这有点重复,但是解决方案在任何地方都不很清楚地写出来,所以我想我会在这里写下来。这是的解决方案后由安迪轩至极被回答。
我正在尝试连接到MBean服务器。我需要编写JMX客户端应用程序。这是用于客户端应用程序的代码。但我有一个例外 检索RMIServer存根失败:javax.naming.ServiceUnavailableException[根异常为java.rmi.ConnectException:连接拒绝主机:localhost;嵌套异常为: 谁能帮我把这个修好。 我使用以下参数运行了这段代码。 dcom.s
我已经为一个服务实现了socket.io,然后删除了它。但是,我仍然有客户机向endpoint/socket.io发出初始连接请求,而endpoint/socket.io已经不存在了。使用各种http状态代码进行响应似乎并不重要。 是否有方法阻止客户端尝试连接?我每分钟收到几千个请求。
我无法连接到我的节点。js服务器。当通过节点使用http web服务器在本地运行它时,它工作得很好,但是当连接到外部时,它会加载<code>socket.io。js文件很好,但当尝试使用套接字时,它会从URL中删除端口,无法连接。 而不是在网络请求中执行此操作: http://external-domain.com:3000/socket.io/?EIO=3 它是这样做的: http://exte
问题内容: 我正在使用Socket.io,并且想知道从客户端到服务器的连接状态。 像这样: 如果连接断开或由于任何原因断开连接,我需要此信息来向用户提供视觉反馈。 问题答案: 您可以检查属性: 它是动态更新的,如果连接丢失,它将设置为,直到客户端再次选择连接为止。很容易检查或类似的东西。 另一个解决方案是捕获事件并自己跟踪状态。