Socket.io房间不工作/没有意义
Socket.io rooms not working/making sense
我正在努力确保每个人都能使用socket.io v1.2.0(和nodejs0.12)看到不同的消息。
我的工作基于这个似乎不起作用的答案(可能是由于版本差异)?https://stackoverflow.com/a/19150254/1582712
// client side
var socket = io();
var room = new Date().getTime().toString() + "-" + Math.random().toString();
socket.emit('create', room);
// server side
io.sockets.on('connection', function(socket){
socket.on('create', function(room) {
socket.join(room);
});
});
当然,还有更多的代码,但也许无关紧要。我将在下面包含完整的代码。无论如何,在这一点上,我的期望是客户端代码会(不知何故)知道它属于房间room
和/或服务器知道向给定的room
发出正确的文本。不管怎样,它都不起作用!
// Server
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var id = "0";
var javaSessions = {_counter: -1};
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
var javaSessionId = javaSessions._counter++;
res.cookie('java_session_id', javaSessionId);
var msnId = req.query.msnId;
var spawn = require('child_process').spawn;
var java = spawn("java.exe",
['-cp', 'lib''*;bin', 'com.app.App', ]);
javaSessions[javaSessionId] = java;
var outBuffer = "", errBuffer = "";
java.stdout.on('data', function(data) {
outBuffer += data.toString();
var lines = outBuffer.split("'n");
for (var i = 0; i < lines.length - 1; i++) {
var line = lines[i];
console.log(line);
io.to(id).emit('stdout', line);
}
outBuffer = lines[lines.length - 1];
});
java.stderr.on('data', function(data) {
errBuffer += data.toString();
var lines = errBuffer.split("'n");
for (var i = 0; i < lines.length - 1; i++) {
var line = lines[i];
console.log("err> " + line);
io.to(id).emit('stderr', id + " -- " + line);
}
errBuffer = lines[lines.length - 1];
});
java.stdout.on('end', function() {
console.log(outBuffer.id);
io.emit('stdout', outBuffer);
});
java.stderr.on('end', function() {
console.log(errBuffer.id);
io.emit('stderr', errBuffer);
});
});
app.get('/unload/:id', function(req, res) {
var java = javaSessions[req.params.id];
javaSessions[req.params.id] = null;
java.kill();
});
io.sockets.on('connection', function(socket){
socket.on('create', function(room) {
socket.join(room);
});
socket.on('stdout', function(msg){
io.emit('stdout', msg);
});
socket.on('stderr', function(msg){
io.emit('stderr', msg);
});
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
// Client
var socket = io();
var room = new Date().getTime().toString() + "-" + Math.random().toString();
socket.emit('create', room);
$('form').submit(function(){
socket.emit('stderr', $('#m').val());
$('#m').val('');
return false;
});
socket.on('stdout', function(data) {
$('#messages').append($('<li class = "stdout">').text(data));
});
socket.on('stderr', function(data) {
$('#messages').append($('<li class = "stderr">').text(data))
});
无论如何,如果只需要向1个客户端发送数据,您可能需要使用另一种方法。
做类似的事情
io.emit('stdout', msg);
将消息广播给所有连接的人。如果你只需要发送给一个客户,那么你应该做一些类似的事情
socket.emit('stdout', msg);
因此,您不必以这种摇摆不定的方式为每个客户创建一个新房间。
相关文章:
- 在前端javascript应用程序中使用DI容器有意义吗
- Node.js时使用async是有意义的
- Angular $q.reject().success(),这有意义吗?
- 在JavaScript中使用===进行字符串比较有意义吗
- 传递给IIFE包装器有多少全局变量是有意义的
- 将Epoch日期转换为有意义的Javascript日期
- 在标准ES6类中添加getter方法有意义吗
- 为给定数量的空格查找可能数量的有意义的英语单词
- 使用 html 选择和日期的依赖日期选择器有意义
- 在这个jQuery插件中,哪种策略更有意义
- 拥有基本服务是否有意义,如果是这样,这是一种好方法
- JS:如何在保持n个有意义的数字的同时简化列表的过度精确数字
- 在Lua VM上运行JavaScript是否有意义
- 在Java 8 Nashorn JavaScript引擎中同时加载脚本是否有意义
- 新手:在MDN上有意义的Javascript闭包示例
- 只使用twitter引导程序中的插件有意义吗
- 将angular服务与es6模块一起使用有意义吗
- 这个JavaScript函数有什么作用?有意义吗
- 在这种情况下,New有意义吗
- 为什么“(state==1&&3)”有意义