Socket.IO问题与控制字符
我正在实现一个使用websockets和通过Telnet访问的控制台的应用程序。 在通过websockets和控制台build立的连接之间有一个通信。 我正在经历一个奇怪的问题:
- 如果我在控制台中input了某个string常量到一个已build立的套接字,它就可以正常工作。
- 如果我发送一个从控制台作用域收到的string它似乎打开一个新的套接字(不知道),因为在debugging日志中我看到它,并在浏览器端(websockets)它提醒我一个新的连接。
- 如果我发送本地string(而不是从另一个范围收到的),它发送正确。 (注释行:client.send(message))
我在这里分享nodeJS代码,考虑到现在这是一个testing应用程序,所以它只能假设一个套接字和websockets连接:
// Sample based on: http://elegantcode.com/2011/05/04/taking-baby-steps-with-node-js-websockets/ // Changed for sockets.io 6.x => 7.x var events = require('events'); var eventEmitter = new events.EventEmitter(); var http = require('http'); var socketIO = require('socket.io'); var static = require('node-static'); var port = 2000; var clientFiles = new static.Server('./client'); var httpServer = http.createServer( function(request, response) { request.addListener('end', function() { clientFiles.serve(request, response); }); }) httpServer.listen(port); console.log("Server running at port: " + port); var io = require('socket.io').listen(httpServer); var webSocket = io.sockets; webSocket.on('connection', function(client) { client.send('Please enter a user name ...'); var userName; eventEmitter.on('someOccurence', function(message) { console.log("Received: " + message); client.send('Line Received'); var s = 'popo'; client.send(s); //client.send(message); }); client.on('message', function(message) { console.log(message); if(!userName) { userName = message; client.broadcast.send(message + ' has entered the zone.'); return; } var broadcastMessage = userName + ': ' + message; client.broadcast.send(broadcastMessage); client.send("Repeated here: " + message); }); client.on('disconnect', function() { var broadcastMessage = userName + ' has left the zone.'; client.broadcast.send(broadcastMessage); }); }); var lines = require('lines-adapter'); var net = require('net'); var server = net.createServer(function (socket) { socket.write("Welcome to the Server\r\n"); lines(socket, 'utf8') .on("data", function(line) { console.log("Line received: " + line); eventEmitter.emit('someOccurence', line); } ) .end("end", function() { console.log("End of Stream"); } ); }); server.listen(1337, "127.0.0.1");
更新:我刚刚testing与socket.io 0.8.6和nodeJS 0.4.12没有这个问题。 我将把这个问题留在这里供将来参考。
修复了socket.io v0.8.6。 这个q应该被回答/closures。
这只是您需要在本地dynamic分配内存的情况。 当string进来时,你应该把string的string复制到一个长度相同的dynamic分配的string中。 问题解决了。