Articles of websocket

node.js websocket.io示例不工作?

我是node.js的新手,并通过“smashing node.js”书中的示例工作。 在websockets章节中,我正在努力使这个例子工作。 原谅我这是一个非常简单的错误! 我不确定ws.onopen事件处理程序是否正在工作? 代码如下:(首先是server.js文件): var express = require('express') , wsio = require('websocket.io'); var app = express.createServer().listen(3000); var ws = wsio.attach(app); app.use(express.static('public')); ws.on('connection', function (socket) { socket.on('message', function(msg) { console.log(' \033[96mgot:\033[39m ' + msg); socket.send('pong'); }); }); 其次是./public/index.html文件的脚本内容: var lastMessage; window.onload = function () { var ws = new WebSocket('ws://localhost'); ws.onopen = function () […]

服务器到客户端更新,无需客户端Websocket编程的持续/持久请求

也许我没有完全理解相关问题的答案。 我得到了长时间的投票,颠倒了Ajax的概念,但事情是这样的: 我目前的设置是在我的本地单位,我是客户,我是服务器。 我可以成功地build立到我的服务器的连接,一旦连接build立,我可以发回给我的客户端一个消息,现在另一个场景来了,我只想服务器build立连接后不断更新我的客户端。 为了简单的目的,比方说,我希望我的客户端更新服务器的时间,所以每一分钟的变化,服务器发送最新的时间到客户端(假设连接已经build立)。 我正在使用node.js和socket.io。 以下是我的代码: 客户: <!DOCTYPE html> <meta charset="utf-8" /> <title>WebSocket Testing</title> <script src="/socket.io/socket.io.js"></script> <script language="javascript" type="text/javascript"> var socket = new io.connect("http://127.0.0.1:8080"); socket.on('connect', function(){ // socket.on('news', function (data) { // socket.emit('my other event', { my: 'data' }); socket.on("test",function(data){ alert(data); }); socket.onmessage = function (event) { console.log(event.data); } }); console.log(socket); </script> <h2>WebSocket Test</h2> […]

在websocket中解码连续帧

你如何解码websocket中的连续帧? 有人可以给我一个有用的见解呢? 将连续帧解码为文本帧会导致错误。 我发送一个大的文本string到服务器,我可以设法解码只有第一个传入的文本框架,然后失败。 这里是nodejs中一个简单的函数来处理文本帧解码 – function decodeWS(data) { var dl = data[1] & 127; var ifm = 2; if (dl == 126) { ifm = 4; } else if (dl == 127) { ifm = 10; } var i = ifm + 4; var masks = data.slice(ifm,i); var index = 0; var output = […]

如何使用websocket中的二进制数据stream填充数组

我从websocket获得了连续的字节数据stream。 当我用这个函数查看数据时: document.getElementById('log').innerHTML = document.getElementById('log').innerHTML + msg + "<br />"; 它看起来像这样: -0.00005645785104823496 0.00000906544783255643 -0.001234972515485563 0.00000008534781277461 . . . 我想填充它看起来像一个数组 var inp = new Array(event.data) , arr = new Float32Array() ; for(var i = 0;i <arr.length; i++) { arr[i] = inp[i]; } 如何填充从websocket接收数据的inp [i]数组。 谢谢

如何以最less的延迟发送Websocket消息?

我正在编写一个在Node.js中编程的Websocket服务器,我计划发送一个多播消息给20,000个用户。 这个消息会以固定的时间间隔发送出去,但是我担心Node.js服务器的性能。 我明白,Node.jsasynchronous工作,创build和销毁线程,但我不确定它的效率。 理想情况下,我想发送消息的平均延迟5毫秒。 目前,我通过运行所有连接客户端的for循环向所有用户发送消息,如下所示: function StartBroadcastMessage() { console.log("broadcasting socket data to client…!"); for(var i=0;i < clientsWithEvents.length;i++){ //Runs through all the clients client = clientsWithEvents[i]; if(client.eventid.toLowerCase() == serverEventName.toLowerCase()) //Checks to see if the Client Event names and server names are the same client.connection.sendUTF(GetEventSocketFeed(client.eventid)); //Sends out event data to that particular client } timeoutId = setTimeout(StartBroadcastMessage,2*1000); […]

节点:使用套接字事件区分重新加载事件和浏览器出口

我想运行一些代码,当一个套接字closures,但只有当用户没有重新加载页面… 我有类似的东西 socket.on("close", function() { //do something here }); 问题是,这个函数在重载事件中运行以及…我可以暂停它稍后运行的价值在稍后的时间。 我试图在callback中使用一个超时设置,但不能从callback中访问套接字对象。 如果套接字连接在不久之后重新获得,那么防止函数运行的最好方法是什么?

从ws://切换到wss://时要注意什么

我发现一些移动networking提供商本身不支持80端口,但他们的确支持443端口,我觉得这有点奇怪。 无论如何,没有什么可以做的,这导致我从端口80切换到端口433,使用wss://赞成ws:// 。 我想知道如果使用wss://有任何负面影响? 问题是我还没有拥有一个SSL证书。

推杆/ PubNub替代使用Heroku上的node.js

我想用node.js构build我自己的多人游戏服务器,并在Heroku上部署代码。 我的问题是,如果我所描述的是可能的那样:) 我希望Android游戏的玩家能够连接到一个非常快速的(不一定是实时的)游戏服务器。 游戏服务器应该能够将它们分组到房间(频道)中,并且当它们在房间中时,它们应该能够发布和订阅 。 这意味着,我希望玩家通过node.js服务器交换游戏信息。 在服务器上,带ws的 node.js应该被用来让WebSocket服务器侦听这样的客户端事件: var WebSocketServer = require('ws').Server; var wss = new WebSocketServer({ port: 8080 }); var clientList = {}; wss.on('connection', function(ws) { ws['AUTH'] = getGUID(); clientList[ws['AUTH']] = ws; // ws['AUTH'] has joined the server ws.on('message', function(message) { for (var clientID in clientList) { clientList[clientID].send(message); } }); ws.on('close', function() { delete […]

命名的事件 – 全部或特定?

我正在开发客户端和服务器应用程序(node.js,socket.io进行通信)。 在客户端和服务器之间发送的消息有很多不同的types,我原本以为在传输的对象中包含这个types: // Client var data = { "type" : 5, "message" : "Hello, world!" }; socket.emit("generic_event", data); 在服务器端,这将被这样处理: // Server socket.on("generic_event", function(e){ console.log("Got a generic_event!", e.type); }); 但是,对于事件types也有更具体的可能性,例如: // Client socket.emit(data.type, data); // Server socket.on(1, function(){ console.log("We got '1'!"); }); // Elsewhere on in the server… socket.on(5, function(){ console.log("We got '5'!"); }); 我很想知道schemeA(单一通用/全部捕获事件)与schemeB(多个/许多特定命名事件)的好处。 性能? […]

我将如何使用一个专门的PHP网站node.js服务器上的Socket.io?

对于使用PHP编码的Web应用程序,我正在使用Socket.io为传统上使用AJAX的许多function(如实时聊天)提供动力。 为了使用Websockets而不损害Apache服务器,我有专门为Websocket连接运行node.js的服务器。 我打算使用DNode来允许php脚本调用node.js Websocket函数。 我将如何做到这一点? 请尽可能提供一个简单的例子。 我意识到这可能不是最有效的结构,但是由于同时使用实时function的大量连接,从PHP运行Websockets将是非常耗费服务器的。 我也知道在服务器和客户端之间还有其他方式实现实时通信,比如长时间的轮询和永久的iframe,但是selectWebsocket有一些具体的原因。