Tag: socket.io

如何识别连接到套接字的两个用户,并将其join到一个房间? Socket.io

所以这里是情况,我需要为我们的数据库中存在的两个人创build一个空间。 问题是我不能根据他们的套接字来识别这些用户。 假设有两个随机用户user1和user2。 现在,用户1想要发起与用户2的聊天,所以当用户1发起并将两个用户join该房间时,我需要创build一个房间。 以下是套接字join房间的问题,并且socket.id随着来自同一主机的重新连接而改变。 所以,我不知道如何joinuser2到房间。 这是代码。 export default function(socketio) { let sockets = []; let people = {}; const findUserById = function findUserById(data) { for (let x in people) { if (people[x].userId === data) { return x; } } } /** * [createRoom Creates a room for two users] * @param {[type]} data1 [Mongoose […]

在更新Node.js和Socket.io之后,Socket.io的连接现在经常断开连接

我的服务已经更新到Node.js v6.9.4,现在Socket.io的连接频繁断开。 它没有在开发环境中复制,并决定恢复到更新之前的状态。 这个问题只与某些版本? 将更新到最新的Node.js解决这个问题? 谢谢您的合作。 更新版本 node.js@6.1.0 → 6.9.4 socket.io@1.4.6 → 1.7.2 # Client and server are the same version express@4.13.4 → 4.14.0 body-parser@1.15.1 → 1.15.2 jquery@2.2.3 → 3.1.1 jsdom@9.0.0 → 9.9.1 断开状态 连接数约为200.(更新前的连接数约为20,000) 连接1或2个小时后,连接断开。 Node.js服务器和负载均衡器(Pound)的CPU负载和内存使用情况没有exception。 关于浏览器的日志(devtools) 断开前请求(轮询)的响应时间为85秒,在下一个请求中输出“400错误请求”错误。 (正常状态下的响应时间为25秒) GET https://myapp.com/socket.io/?node…sport=polling.. 200 OK 24.99ms POST https://myapp.com/socket.io/?node…sport=polling.. 200 OK 1ms GET https://myapp.com/socket.io/?node…sport=polling.. 200 OK 25.01ms […]

将Android客户端迁移到socket.io 2.0的策略

新的2.0 socket.io服务器与以前的版本不兼容。 对于Web客户端来说,迁移可能会很痛苦(请参阅将主要的socket.io升级(1.4.5到2.0)部署到生产环境的build议方法 ),但是可以pipe理。 不过,对于Android客户端来说,我不知道如何pipe理过渡期,而无法让1.x和2.x客户端都能正常工作。 我的想法是运行两台服务器(1.x和2.0),并在连接到两台服务器的服务器端使用桥接器,并将消息中继到客户端。 为此桥需要连接到两个不同的socket.io版本,甚至有可能吗? 其他人是否有同样的问题,然后想到一个更好的策略?

使用socket.io连接到公共IP地址

我需要做什么才能使用我的公共IP地址连接到服务器? 到目前为止,我只能在本地连接。 这是我的代码。 服务器代码: var app = require('express')(); var server = require('http').Server(app); server.listen(80, function(){ console.log("Server is running…"); }); 客户端代码(有时会触发一次,直到连接): try { socket = IO.socket("http://192.168.1.33:80"); } catch (URISyntaxException e) { e.printStackTrace(); } socket.connect(); 好像只是改变本地地址给公众一个不行。 我到底需要做什么? 更新:我做了这些来解决这个问题。 使用我的电脑公共IP地址。 (不是路由器的) 将端口从80更改为另一个端口。 允许防火墙打开端口。 很重要 端口转发并确保端口处于打开状态。 港口80仍然closures,即使在第3步,但其他港口工作。

如何closuresAngular 2/4 +和Socket.io中的websocket

我试图创build一个使用websockets的应用程序,但是遇到了可怕的“多重连接”问题,每次页面重新加载而不是closures并重新打开一个新的websocket,另一个连接只是添加到列表中。 我的问题是,如果有人知道从Angular 2/4 +closuresSocket.io websocket的最佳/正确的方式。 至于代码,这是我所拥有的: service.ts getUserSocket(userID: string): Observable<any> { return new Observable(_Observer => { // Setup the socket namespace subscription this.UserSocket = io(NTC_API_URL + `/user/${userID}`, { secure: true }); this.UserSocket.on('message', _Message => { console.log(_Message); }) }) } closeUserSocket() { this.UserSocket.disconnect(); this.UserSocket.close(); } component.ts ngOninit() { // Setup the User Socket this.UserSocket = this._UsersService.getUserSocket(this.currentUser.userID) […]

服务器和客户端在socket.io中的“on”和“emmit”不同

我很难理解服务器何时“发送”数据,何时客户端“获取”数据,反之亦然。 代码是在他们的例子 在nodejs的index.js中 // server side var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); app.get('/', function(req, res){ res.sendFile(__dirname + '/index.html'); }); io.on('connection', function(socket){ console.log('a user connected'); // create chat message socket.on('chat message', function(msg){ io.emit('chat message', msg); console.log('message: ' + msg); }); socket.on('disconnect', function(){ console.log('user disconnected'); }); }); http.listen(3000, function(){ console.log('listening on […]

Socket.io – 通过https从客户端连接到服务器

我在我的虚拟服务器(Ubuntu)上创build了一个socket.io聊天应用程序,它作为systemd服务运行,并且正在运行。 我的server.js位于: /var/www/vhosts/mywebpage.de/w1.mywebpage.de/chat/ server.js看起来像这样: const io = require('socket.io')(3055); io.on('connection', function(socket) { // When the client emits 'addUser', this listens and executes socket.on('addUser', function(username, room) { … }); // When the client emits 'sendMessage', this listens and executes socket.on('sendMessage', function(msg) { … }); // Disconnect the user socket.on('disconnectUser', function(username, room) { … }); }); 在我的网站(https),我尝试连接如下: <script […]

如何确保socket.io服务器接收到socket.io-client消息?

有没有办法确保socket.io服务器接收到socket.io-client消息? 我在这里看到socket.io中有一个确认机制。 如果没有收到确认(这里是否有任何标准模式),或者如果在规定的时间内没有收到确认,socket.io-client会重试发送消息,我们可以再次重试发送消息吗? 我的应用程序通过2g蜂窝networking使用socket.io-client。 消息到达服务器的时间有98%没有任何问题。 另外2%的信息由于蜂窝networking的问题而丢失。 它会声称有一个套接字连接,数据将被传输,但服务器端永远不会得到它。 我想知道是否有一个确定的消防方式,以确保客户端消息已经到服务器。 我的每个客户都已经有一个ID,但不能假设消息到达那里。 有没有人有一个如何重新发送相同的消息,如果没有在一定的时间范围内确认的例子。 我甚至不在乎是否再次发送同样的消息,这是不可取的,但对我来说并不重要。

如何发送JSON中的ArrayBuffer从js客户端到nodejs服务器?

我想发送数据的typesArrayBuffer在JSON到我的服务器使用socket.io像这样: socket.emit('record', { name: myUsername + '.wav', data: data //arraybuffer }); 在服务器端,当我在套接字中收到“logging”事件时,我从JSON获取数据并将其保存在名称文件中,如下所示: socket.on('record', function(message){ var fileWriter = new wav.FileWriter(message.name, { channels: 1, sampleRate: 48000, bitDepth: 16 }); message.data.pipe(fileWriter); }); 我使用npm的require('wav') & require('stream')包。 问题是我的服务器崩溃message.data.pipe(fileWriter); 有这个错误: TypeError: message.data.pipe is not a function 我究竟做错了什么? 我不能在socket.io中像这样发送ArrayBuffer吗?

只在socket.io上“轮询”

我有两个应用程序在openshift v2托pipe,都有相同的代码 ,第一次使用Node.js 0.10和socket.io完美的作品。 第二个应用程序使用Node.js 8.2.1,但socket.io不起作用,我得到了与在这些其他网站相同的错误: 客户端在socket.io上接收轮询 Socket.io无法连接,请求“投票” Socket.io连接恢复到轮询,从不触发'连接'处理程序 我试图做出答案,但没有结果,如果代码在我的两个应用程序是相同的。什么可以失败? 有必要对新版本的Node.js进行一些更改? 这是我的应用程序中的相关代码和有关它的信息: 这两个应用程序在8080或3000端口上运行完美。 服务器 App.js var fs = require('fs'); var express = require('express'); var app = express(); var server = require('http').Server(app); var bodyParser = require ('body-parser'); var jwt = require('jsonwebtoken'); var io = require('socket.io')(server); var server_ip_address = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1'; var server_port = process.env.OPENSHIFT_NODEJS_PORT || […]