套接字 io 传输错误
Posted
技术标签:
【中文标题】套接字 io 传输错误【英文标题】:Transport error with socket io 【发布时间】:2018-09-17 23:49:57 【问题描述】:我试图在与套接字 io 断开连接时向后端发送用户名,当我在取消订阅套接字连接时将用户名作为参数传递时,它给了我问题传输错误。
这是我的代码
客户端“连接”只是一个变量:
messages = [];
connectedUsers = [];
connection;
message;
Username = JSON.parse(localStorage.getItem('user')).username;
users = [];
ngOnDestroy()
this.connection.unsubscribe(username: 'emons');
服务器端这是我处理发射的地方,控制台日志正常,但 'console.log(usersConnected[i] +' was spliced')' 不起作用,因为条件从未满足:
const app = express();
const port = 3000;
const server = http.Server(app);
const io = socketIo(server);
var usersConnected = [];
io.on('connection', function(socket)
console.log('a user connected');
/*socket.on('new-connection', function(user)
io.sockets.emit('newUser', type: 'new-connection', username: user);
); */
socket.on('disconnect', function(user)
console.log(user + ' jsjasdjbskjcbawsjbsajdbasjabdsj')
for (var i = 0; i < usersConnected.length; i++)
if (user.username == usersConnected[i])
usersConnected.splice(i, 1);
console.log(usersConnected[i] +' was spliced')
;
console.log(usersConnected);
console.log('user disconnected');
);
socket.on('add-message', function(msg)
console.log('added message');
io.sockets.emit('message', type: 'new-message', username: msg.user, text: msg.message);
);
//trying to get all the users.
socket.on('chat-connection', (data) =>
socket.join(data.username);
console.log(data.username);
usersConnected.push(data.username);
io.emit('new-user', usersConnected);
)
);
chat.service.ts:
sendMessage(message)
this.socket.emit('add-message', message);
sendUser(user)
console.log(user);//print correctly
this.socket.emit('chat-connection', user);
removeUser(user)
this.socket.emit('remove-user', user);
getMessages()
let observable = new Observable(observer =>
this.socket = socketIo(this.url);
this.socket.on('message', (data) =>
observer.next(data);
);
return () =>
this.socket.disconnect();
);
return observable;
getUsers()
let userObservable = new Observable(observer =>
this.socket = socketIo(this.url);
this.socket.on('new-user', (data) =>
observer.next(data);
);
);
return userObservable;
【问题讨论】:
只是好奇,你是在查看控制台日志吗? 我得到了控制台日志,除了 'usersConnected[i]...' 一个,因为条件从未满足,因为用户 = 打印时出现传输错误 你的this.connection.unsubscribe
功能是什么?
【参考方案1】:
我认为你的服务器端可以是:
let allClients = [];
socket.on('connection', function(client)
allClients.push(client);
client.once('disconnect', function()
console.log('Got disconnect!');
client.disconnect();
var i = allClients.indexOf(client);
allClients.splice(i, 1);
);
client.on('LEAVE_ROOM', function (data)
console.log('Got disconnect!', data);
client.disconnect();
var i = allClients.indexOf(client);
allClients.splice(i, 1);
);
);
disconnect
网络断开事件。您可以在初始化 SocketIO Server 时设置超时:
pingTimeout(Number): 没有pong包多少毫秒认为连接关闭(60000)
客户端可以是:
$(window).on('beforeunload', function()
socket.emit('LEAVE_ROOM', reason);
);
【讨论】:
我曾尝试实现这一点,但不幸的是,我没有成功。无论如何,您是否可以以我使用的形式实现代码,即使用已传递的套接字我为上下文添加了额外的代码。我正处于最后期限,因此收到了不寻常的请求。 @Samlemonts 你试过从客户那里发送socket.emit('LEAVE_ROOM', reason);
吗?以上是关于套接字 io 传输错误的主要内容,如果未能解决你的问题,请参考以下文章
SignalR IOS 客户端,Web 套接字传输无法从服务器调用方法
使用套接字 IO 和 Node JS 通过套接字流式传输麦克风
使用 AVFoundation 在 iOS 上播放套接字流式传输的 h.264 电影