Sockets 如何使用NodeJS将侦听一个端口的WebSocket连接到侦听另一个端口的netsocket?
这是我尝试过但不起作用的方法。我可以将来自WebSocket连接的传入消息转发到NetSocket,但只有NetSocket接收到的第一条消息到达WebSocket后面的客户端Sockets 如何使用NodeJS将侦听一个端口的WebSocket连接到侦听另一个端口的netsocket?,sockets,websocket,nodes,Sockets,Websocket,Nodes,这是我尝试过但不起作用的方法。我可以将来自WebSocket连接的传入消息转发到NetSocket,但只有NetSocket接收到的第一条消息到达WebSocket后面的客户端 const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 8080 }); const NetSocket = require('net'); const net = new NetSocket.Socket(); // Web
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
const NetSocket = require('net');
const net = new NetSocket.Socket();
// Web socket
wss.on('connection', function connection(ws) {
console.log((new Date()) + ' Remote connection accepted ' + ws.remoteAddress);
ws.on('message', function incoming(message) {
console.log('Received from remote: %s', message);
net.write(message)
});
ws.on('close', function(){
console.log((new Date()) + ' Remote connection closed');
});
});
// Net socket
net.connect(8745, '127.0.0.1', function() {
console.log((new Date()) + ' Local connection accepted');
});
net.on('data', function(data) {
console.log('Received from local: ' + data);
// Iterate the connected devices to send the broadcast
wss.clients.forEach(function each(c) {
if (c.readyState === WebSocket.OPEN) {
c.send(data);
}
});
});
net.on('close', function() {
console.log('Local connection closed');
});
经过一项新的研究,我发现问题出在我的swift代码中
private func setReceiveHandler() {
webSocketTask.receive { result in
defer { self.setReceiveHandler() } // I was missing this line
do {
let message = try result.get()
switch message {
case let .string(text):
print("Received text message: \(text)")
case let .data(data):
因此,只需将延迟{self.setReceiveHandler()}添加到我的函数中,它就开始工作了
请注意receive处理程序开头的defer语句。它调用self.setReceiveHandler()重置套接字连接上的接收处理程序,以允许它接收下一条消息。当前,在套接字连接上设置的接收处理程序只调用一次,而不是每次接收消息时调用一次。通过使用defer语句,您可以确保在退出接收处理程序的作用域之前始终调用self.setReceiveHandler,从而确保始终从套接字连接接收下一条消息
我的信息来自: