Tag: websocket

我应该使用AJAX还是WebSockets?

呵呵, HTTP和WebSockets这个令人愉快的问题再次出现,但是即使在阅读数百篇关于博客文章,SO问题等等之后,我仍然完全丧失了我应该做的事情正在努力为我们的应用程序。 在这篇文章中,我将提供有关应用程序function的信息,以及当前在我们的应用程序中使用的请求/响应的types。 目前我们的应用程序是一个草率的工作,一起使用AngularJS和AJAX请求到一个运行PHP的Apache服务器,即XAMPP 。 随着我们的应用程序的启动,我注意到,当服务器处于任何负载下时,我们遇到了响应时间的问题。 这可能与我们服务器的臃肿架构,硬件以及我们的MySQL数据库没有完全优化的事实有关。 然而,有了这样一个忠实的粉丝群和投资者看到我们的应用程序的潜力,并给我们一个机会推出2.0我一直在努力研究如何将这个应用程序变成一个低延迟的可扩展性的强大。 老实说,最好的select是hire someone with experience ,但不幸的是,我是一个业余爱好者,也是一个没有太多经验的一人军队。 经过一番广泛的研究,我决定这次使用NodeJS编写后端。 但是,我很难决定HTTP或Websockets 。 以下是在服务器/客户端之间完成的事务types。 客户端以JSON格式向服务器发送请求。 请求有几个不同的东西。 请求ID(用于基于请求的处理逻辑) 与请求ID关联的数据。 服务器接收请求,轮询数据库(如有必要),然后以JSON格式响应客户端。 有时服务器正在向客户端提供文件。 即Base64格式的图像。 目前,应用程序(在使用时)每次更改接口时都会向服务器发送请求,平均而言,我们的应用程序每隔几秒就会发送一次请求。 我们接口上的每个操作都会向服务器发送另一个请求。 应用程序还会每隔8秒发送一次检查通知/消息的请求(或者根据消息接口是否为2秒)。 目前这里是我看到的与我们的应用程序stateless连接的一个stated连接的好处。 如果连接被声明,我可以消除对通知和消息的请求,因为服务器只要有一个可用就告诉客户端。 这可以消除每秒x(n)/4请求到服务器。 处理类似从服务器断开连接的事情就像试图重新连接一样简单,而不是每个请求处理超时/错误,这只能在套接字上处理。 通过删除用于数据库交互的安全密钥可以获得额外的安全性,这可以防止Hijacking(?) session_key并使用它来操纵或访问其他用户数据的可能性。 由于AJAX设置中没有状态,因此只需要session_key。 不过,我是通过TCP游戏服务器仿真开始学习编程的人。 所以我理解STATE连接的some好处,但是我根本不明白STATELESS连接的好处。 我知道他们都有他们的好处和怪癖,但我很好奇什么是对我们最好的方法。 我们主要是在寻找可伸缩性,因为我们有一个本地应用程序的启动,并在48小时内成为近10,000个用户的瓶颈。 幸运的是,我宣布这是一个BETA ,用户在了解到我自己作为一个学习项目完成之后,正在削减我很多的负担。 我已经禁用注册,同时考虑改进应用程序的前端和后端。 重要: 如果使用WebSockets,我们可以像使用AJAX那样asynchronously从服务器上下载图片吗? 例如,我可以使用AJAX为5个不同的图像向服务器发出5个请求,并且他们都将立即开始下载,使用一个规定的连接,我将不得不等待每个照片进行stream式传输,然后才能转到下一个请求? 这仅仅是一个单一用户,还是等待请求完成的每个用户?

用于在2个客户端之间进行通信的Node.js模块?

我正在寻找一个Node.js模块(或一个build议/想法),以便我的服务器可以创build/处理特定客户端之间的双向通信 换句话说,我希望能够将来自客户端X的数据传输到客户端Y,反之亦然。 我正在查看socket.io但它似乎是一个传统的networking套接字服务器,从所有客户端接收消息,然后发送相同的消息到所有客户端。 我可能是错的,因为我没有这方面的经验。 在我的情况下,我确实希望我的服务器能够接收来自不同客户端的消息,但是我希望服务器将这些消息转发给特定的客户端。 例如 转发仅从客户端X到客户端Y的消息(反之亦然) 转发msg只从客户端A到客户端B(反之亦然) 等等 我没有与networking套接字的经验(我甚至不知道是否是networking套接字是我正在寻找),但我有基本的Node.js服务器的经验。 谢谢你的帮助!

我应该使用websockets或webRTC 4player游戏

我目前正在用node.js和socket.io制作html5游戏。 游戏的基本知识是四个人围着圈子试图打彼此… 我的问题是我应该使用Websockets还是WebRTC? 这种沟通最适合什么? 点对点与4个玩家或通过服务器? 随意分享你的想法,我很新的东西..

如何处理io.use中间件来捕获客户端上的错误?

我需要检查我的套接字连接的身份validation,如果失败,请删除一个。 我的服务器和客户端代码如下所示: // server.js var http = require('http'); var sio = require('socket.io'); var app = require('express')(); var server = require('http').createServer(app).listen(3000, function () { console.log('Server listening on 3000 port'); }); var io = sio.listen(server); io.use(function (socket, next) { return next(new Error('Not Authenticated')); }); // client.js var socket = io.connect(window.location.origin); socket.on('connect', function () { console.log('socket connected') }); […]

使用nodejs / socket.io和wscat获取“套接字挂起”

我有以下nodejsnetworking套接字服务器 var app = require('express')(); var server = require('http').Server(app); var io = require('socket.io')(server); server.listen(8000); app.get('/', function (req, res) { res.sendFile(__dirname + '/index.html'); }); io.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); }); console.log("Listening on 8000"); 当试图连接使用wscat wscat -c ws://localhost:8000/ 我得到以下错误 error: Error: socket hang up 它使用以下JavaScript在浏览器中工作得很好 […]

WebSocket二进制传输比发送的服务器返回更多的数据

我有一个WebSocket接收二进制数据的问题,即浏览器接收到的字节数(以ArrayBuffer的forms,在JavaScript中)高于服务器发送的数据,即使Chrome或Firefox正确报告多less个字节被传输线。 服务器端是Node JS,我使用了3个不同的包(ws,nodejs-websocket和websocket),它们都performance相同。 所以这个问题很可能是JavaScript在浏览器中运行。 我在客户端的代码如下所示: 1: var socket = new Websocket(url); 2: socket.binaryType = 'arraybuffer'; 3: socket.onmessage = function(event) { 4: var buffer = new Uint8Array(event.data); 5: // consume the buffer 6: } 问题是,如果我检查“缓冲区”(在第4行之后)的长度,它比从服务器发送的数据更高。 例如,如果服务器发送二进制内容,则8个字节: 0xa1 0xb2 0xc3 0xd4 0xa1 0xb2 0xc3 0xd4 在客户端,我看到: 0xc2 0xa1 0xc2 0xb2 0xc3 0x83 0xc3 0x94 0xc2 0xa1 0xc2 […]

Rails 5 – ActionCable – 无法升级到WebSocket

我试图在我的Rails 5应用程序上实现一个webSocket。 这是我的频道: class MessagesChannel < ApplicationCable::Channel def subscribed stream_from "messages_#{params[:topic]}" end end 在我的控制器我做: ActionCable.server.broadcast "messages_#{params[:topic_id]}", message: @message.message, user: current_user.name 和我的连接类(使用设备也): module ApplicationCable class Connection < ActionCable::Connection::Base identified_by :current_user def connect self.current_user = find_verified_user logger.add_tags 'ActionCable', current_user.email end protected def find_verified_user # this checks whether a user is authenticated with devise if verified_user = env['warden'].user […]

AWS ElasticBeanstalk + Socket.IO + SSL问题

我在使用AWS ElasticBeanstalk和NodeJS环境+ Socket.IO + SSL来处理我们的消息应用程序时遇到了麻烦。 我已经在试图解决这个问题的圈子里运行,但是我总是会遇到一个WebSocket握手错误(504 GATEWAY_TIMEOUT)。 AWS Elastic Beanstalk负载均衡器configuration: ELB安全入站规则 实例的安全入站规则 响应错误 前端代码 提前致谢。 任何帮助,高度赞赏!

WebSocket连接到'ws:// localhost:3000 /'失败:连接在收到握手响应之前closures

我参加了一个我的朋友制作的游戏,并希望通过在WebRTC和Websockets之间的对等点之间发送按键数据来跨浏览器进行游戏。 但是,我在控制台中得到这个错误: WebSocket连接到'ws:// localhost:3000 /'失败:连接在收到握手响应之前closures 我的服务器文件有以下几行: 'use strict'; const express = require('express'); const SocketServer = require('ws').Server; const path = require('path'); const PORT = process.env.PORT || 3000; const INDEX = path.join(__dirname, 'index.html'); const server = express(); server.use(express.static(path.join(__dirname, 'lib'))); server.use('/assets', express.static(path.join(__dirname, 'assets'))); server.listen(PORT, () => console.log(`Listening on ${ PORT }`)); const wss = new SocketServer({ server }); […]

为什么WebSocket.onmessage事件不会触发?

经过几个小时的忙碌之后,我根本找不到解决办法。 我正在使用“node.js”为我正在开发的基于canvas的在线游戏的WebSocket服务器上工作。 我的游戏可以很好地连接到服务器,它接受握手,甚至可以发送消息到服务器。 但是,当服务器响应客户端时,客户端不会收到消息。 没有错误,没有什么,只是平静地坐在那里。 我已经撕开了我的代码,试图解决这个问题的一切,但唉,没有。 这是我的服务器代码的一个剥离的副本。 正如我之前所说,握手工作正常,服务器接收数据正常,但发送数据回到客户端没有。 var sys = require('sys'), net = require('net'); var server = net.createServer(function (stream) { stream.setEncoding('utf8'); var shaken = 0; stream.addListener('connect', function () { sys.puts("New connection from: "+stream.remoteAddress); }); stream.addListener('data', function (data) { if (!shaken) { sys.puts("Handshaking…"); //Send handshake: stream.write( "HTTP/1.1 101 Web Socket Protocol Handshake\r\n"+ "Upgrade: WebSocket\r\n"+ "Connection: […]