gpt4 book ai didi

javascript - 控制字符的 Socket.IO 问题

转载 作者:IT老高 更新时间:2023-10-28 21:51:02 24 4
gpt4 key购买 nike

我正在实现一个使用 websockets 和一个通过 Telnet 访问的控制台的应用程序。通过 websockets 建立的连接与控制台之间存在通信。我遇到了一个奇怪的问题:

  • 如果我在控制台中输入内容时将字符串常量发送到已建立的套接字,它可以正常工作。
  • 如果我发送从控制台范围接收到的字符串,它似乎打开了一个新套接字(不确定),因为在调试日志中我看到了它,并且在浏览器端(websockets)它提醒我有新连接。<
  • 如果我发送一个本地字符串(而不是从另一个范围接收的字符串),它就会正确发送。 (注释行:client.send(message))

我在这里分享 nodeJS 代码,考虑到这是一个测试应用程序,所以假设只有一个套接字和 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");

更新:我刚刚使用 socket.io 0.8.6 和 nodeJS 0.4.12 进行了测试,没有这个问题。我将把这个问题留在这里以供将来引用。

最佳答案

在 socket.io v0.8.6 中修复。这个 q 应该被回答/关闭。

关于javascript - 控制字符的 Socket.IO 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7189849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com