Articles of 套接字

NodeJS和socket.io消息调度最佳实践

我们正在用NodeJS和websockets编写多人游戏。 在devise服务器的架构时,我们提出了处理大多数自己的通信的对象的想法。 关于连接的第一个例子,我们将把套接字传递给客户端对象,客户端对象然后可以自己处理通信。 其中一个好处就是不必拥有一个全局处理程序来传递消息。 这使责任分开。 然后,我可以通过向客户发送房间ID来告诉客户自己通过socket.iofunctionjoin特定房间。 我们可以看到的主要缺点是可能会出现我们需要复制套接字。 即:如果客户从房间断开并想要join另一个房间。 所以另一种select是采用更经典的方式,全局处理所有的消息,然后把关联的id路由到相关的对象。 你们会build议一个解决scheme,为什么?

如何获取Socket.IO中的用户信息

大家好,我有这个问题,希望任何人都可以帮忙。 所以,当用户login时,我将有使用套接字的客户端ID。但是,我有这个ID后,如何检索数据库中的user_id字段。我已经在NodeJS中安装MySql。 这是我的server.js文件 var socket = require( 'socket.io' ); var express = require( 'express' ); var http = require( 'http' ); var dateFormat = require('date-format'); var app = express(); var server = http.createServer( app ); var io = socket.listen( server ); var connection = require('mysql').createConnection({ host : 'localhost', user : 'root', password : '', database […]

如何在Python中使用socket.io客户端?

我用我的html文件中的socket.io(JavaScript库)发送和获取套接字数据,通过此代码: var socket = io(); $('form').submit(function () { socket.emit('msgSend', $('#m').val()); $('#m').val(''); return false; }) socket.on('msgReceive', function (msg) { $('#messages').append($('<li>').text(msg)); }) 我在后端使用node.js服务器和socket.io 。 但是现在我想用python作为客户端。 我怎样才能使用Python而不是客户端JavaScript?

socket.io不能在客户端工作(传输错误)

我试图按照教程https://laracasts.com/discuss/channels/general-discussion/step-by-step-guide-to-installing-socketio-and-broadcasting-events-with-laravel- 51 。 我得到了node.js运行,reddis工作和端口3000正在监听。 我可以在命令行上获取控制台消息。 当我尝试向客户端发送任何内容时会发生问题。 切断方: var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); var Redis = require('ioredis'); var redis = new Redis(); redis.subscribe('test-channel', function(err, count) { }); redis.on('message', function(channel, message) { console.log('Message Recieved: ' + message); message = JSON.parse(message); io.emit(channel + ':' + message.event, message.data); }); http.listen(3000, function(){ console.log('Listening […]

重新连接不同的IP后,Socket.remoteAddress不会更新

我正在编写通过TCP与测量传感器进行通信的NWJS应用程序。 我正在使用一个套接字实例。 当build立连接(连接事件)时,我使用remoteAddress属性来显示当前连接的传感器的IP地址。 问题: 我连接到IP地址上的传感器,比如说A,remoteAddress和_host socket属性都是正确的。 我使用socket.destroy()断开传感器 我将应用程序连接到IP地址B上的另一个传感器,然后出现问题 – remoteAddress属性显示错误的以前的地址A,但_host属性显示B 最小步骤重现(交互式nodejs控制台): net = require('net') socket = new net.Socket() socket.connect("192.168.0.20", 1028) //socket.remoteAddress is 192.168.0.20, socket._host is 192.168.0.20, socket.destroy() //later socket.connect("192.168.0.17", 1028) //socket.remoteAddress is 192.168.0.20, socket._host is 192.168.0.17 我可以通过每次创build传感器套接字的新实例或者使用_host属性来解决这个问题,但是想讨论这个行为的原因(bug?)

Swift / iOs /套接字:如何接收套接字“事件免费”的数据?

我正在努力构build一个简单的基本的真正的聊天应用程序,使用苹果的SWIFT客户端部分和nodejs的服务器端。 我使用websockets库来pipe理客户端/服务器通信。 我很快注意到,似乎我无法捕捉来自我的服务器的数据,而无需启动事件。 我试图让我的应用程序支持双向聊天,一方面在xcode 7中从我的iOS模拟器发送/接收消息,另一方面在桌面web浏览器(firefox)中做同样的事情。 从两个部分创build的所有消息都成功注册在我的mongodb数据库(通过nodejs mongoose),但在iOs模拟器时,我devise了一个聊天界面,我需要重新启动模拟器,每次我想看到新的传入消息。 我的目标是:在iOs仿真器UI中实时显示来自firefox和iOS模拟器的所有传入消息,当然使用套接字。 当我从我的浏览器发送消息到我的iOs应用程序,应该立即显示这一个。 当我从iOs用户界面发送信息的时候是这样的,但是从Firefox发出的信息却不是这样。 请,我需要一些帮助,以了解我的代码有什么问题(分三部分): Xcode / Swift: import Foundation import UIKit class ViewTwo: UIViewController,UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate{ var lab : [String!] = []; var desc : [String!] = []; var dictionnary : [String:String!] = ["user": nil,"message" : nil]; var voidDict:[String:String!] = ["content" : "whatever"]; @IBOutlet var tableView: UITableView! @IBOutlet var txtField: […]

Socket.io发射两次

我在我的Node.js后端创build了一个socket.io,它发出了AngularJS然后捕获并显示错误的某些事件,并更改了一些$ rootScopevariables。 我有一个问题,这个发射似乎每次都给我两次通知,而且我不知道问题出在哪里 server.js (shortened) var socket = require('socket.io'); var app = express(); var router = express.Router(); app.use('/api', router); var server = app.listen(config.conn_port, function(){ console.log("Server launched at port " + config.conn_port); }); var io = socket.listen(server); require('./api/routes')(router, connection, io); routes.js module.exports = function(router, connection, socket) { # Net event client.on('error', function () { socket.emit('serverDisconnected', {message: […]

express-ws和socket.io获得404连接

我正在尝试构build一个使用Web套接字与NodeJS中的服务器进行讨论的网页。 对于客户来说,没有什么奇特的: var socket = io.connect('http://localhost:8081'); 对于服务器,我使用“快速”(因为我想有一个/login路线),但我有一些麻烦。 事实上,当我尝试连接上面的行时,我得到一个404“ http:// localhost:8081 / socket.io /?EIO = 3&transport = polling&t = LGRAhbD ”。 尽pipe我使用“express-ws”,但我认为“express”并不知道路由。 这是我的代码: var express = require("express"); var app = express(); var http = require("http").Server(app); var expressWs = require('express-ws')(app); var jwt = require("jsonwebtoken"); var socketJwt = require('socketio-jwt'); app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "http://localhost:8080"); res.header('Access-Control-Allow-Credentials', true); next(); […]

在heroku上部署node.js TCP服务器

我创build了一个使用node.js接收来自客户端消息(使用TCP客户端android应用程序进行testing)的TCP服务器。 是否有可能在heroku上部署? 这是代码 var http = require('http') var express = require('express') var app = module.exports = express.createServer(); var net = require('net') var port = process.env.PORT || 5000 var routes = require('./routes') app.configure(function(){ app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.set('view options', {layout:false, pretty:true}); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(__dirname + '/public')); }); app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, […]

在socket.io中断开连接是必要的

在客户端,你可以做socket.disconnect(true) ,但这是必要的? 这会对表演有多大影响?