我正在寻找支持多个房间的websocket/node.js聊天实现.
我也打算写一个需要多个房间或服务器的应用程序,我只是在寻找人们如何做的代码示例.
谢谢.
我知道有一个服务http://pusherapp.com提供这项服务,但我正在寻找一个开源示例.
我正在实现一个使用websockets和通过Telnet访问的控制台的应用程序.通过websockets建立的连接与控制台之间存在通信.我遇到了一个奇怪的问题:
我在这里分享nodeJS代码,考虑到这现在是一个测试应用程序所以它假设只有一个套接字和websockets连接:
// Sample based on: http://elegantcode.com/2011/05/04/taking-baby-steps-with-node-js-websockets/
// Changed for sockets.io 6.x => 7.x
var events = require('events');
var eventEmitter = new events.EventEmitter();
var http = require('http');
var socketIO = require('socket.io');
var static = require('node-static');
var port = 2000;
var clientFiles = new static.Server('./client');
var httpServer = http.createServer(
function(request, response) {
request.addListener('end', function() {
clientFiles.serve(request, response);
});
})
httpServer.listen(port);
console.log("Server running at port: " + port);
var io = require('socket.io').listen(httpServer);
var webSocket = io.sockets;
webSocket.on('connection', function(client) { …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个C#Web套接字服务器,但它给了我一些麻烦.我正在运行一个Web服务器(ASP.NET)来托管带有javascript的页面,而Web套接字服务器则是作为C#控制台应用程序实现的.
我能够检测来自客户端的连接尝试(运行javascript的chrome)以及从客户端检索握手.但是客户端似乎不接受我发回的握手(onopenWeb套接字上的函数永远不会被调用).
我一直在阅读The Web Socket协议,我看不出我做错了什么.下面是一些服务器代码:
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8181);
listener.Bind(ep);
listener.Listen(100);
Console.WriteLine("Wainting for connection...");
Socket socketForClient = listener.Accept();
if (socketForClient.Connected)
{
Console.WriteLine("Client connected");
NetworkStream networkStream = new NetworkStream(socketForClient);
System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(networkStream);
System.IO.StreamReader streamReader = new System.IO.StreamReader(networkStream);
//read handshake from client:
Console.WriteLine("HANDSHAKING...");
char[] shake = new char[255];
streamReader.Read(shake, 0, 255);
string handshake =
"HTTP/1.1 101 Web Socket Protocol Handshake\r\n" +
"Upgrade: WebSocket\r\n" +
"Connection: Upgrade\r\n" + …Run Code Online (Sandbox Code Playgroud) 我即将开发一个近乎实时聊天的网站.我知道它可以使用xmpp或websocket协议实现.我也知道xmpp协议是在1999年开发的,我想它现在应该是成熟的.另一方面,websocket协议已于2011年开发.
我计划开发一个基于Web的聊天应用程序,它接收ReSTful请求,将它们转换为XMPP并将它们传送到XMPP服务器.
对于这种基于聊天的应用程序使用websockets看起来很有希望,因为事件(或响应)可以异步传递.但是,如果我使用websockets作为从浏览器传输请求的底层协议,这仍然可以被视为ReSTful设计吗?如果是,那么在websocket消息中如何表示URI,动词(GET,POST ...)参数?将它们包装在xml/json中并发送它?
此外,ReSTful架构声明服务器上不会存储任何会话状态.但是在这种情况下,当创建XMPP客户端会话时,此会话的状态将存储在服务器上(违反无状态约束)
任何人都可以使用WebSockets(Socket.io)为Node.js提供坚如磐石,简单的单元测试吗?
我正在为Node.js使用socket.io,并查看了socket.io-client,以便在测试中建立与服务器的客户端连接.但是,我似乎错过了一些东西.
在下面的示例中,"工作......"永远不会打印出来.
var io = require('socket.io-client')
, assert = require('assert')
, expect = require('expect.js');
describe('Suite of unit tests', function() {
describe('First (hopefully useful) test', function() {
var socket = io.connect('http://localhost:3001');
socket.on('connect', function(done) {
console.log('worked...');
done();
});
it('Doing some things with indexOf()', function() {
expect([1, 2, 3].indexOf(5)).to.be.equal(-1);
expect([1, 2, 3].indexOf(0)).to.be.equal(-1);
});
});
});
Run Code Online (Sandbox Code Playgroud)
相反,我只是得到:
Suite of unit tests
First (hopefully useful) test
? Doing some things with indexOf()
1 test complete (26 ms)
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我想知道是否可以在同一个node-websocket-server应用程序实例上运行的不同websocket"连接"上进行广播.想象一下,聊天服务器有多个房间,只在单个node.js服务器进程上向每个房间的参与者广播消息.我已成功实现了每个进程一个聊天室的解决方案,但我希望将其提升到新的水平.
我目前正在开发一个项目,要求客户端请求大量工作并将其发送到服务器.然后,服务器将作业分开并响应一组URL,以便客户端进行GET调用并回送数据.我是该项目的新手,我目前正在使用Spring websockets来提高效率.而不是客户端不断ping服务器以查看它是否已准备好返回结果,websocket现在只需直接联系客户端万岁!
让websockets从头到尾管理整个过程是不是一个坏主意?我正在使用带有Spring websockets的STOMP,是否仍然存在抛弃REST的主要问题?
HTML5 websockets目前使用TCP通信的形式.然而,对于实时游戏,TCP不会削减它(并且是使用其他平台的很好的理由,如本机).由于我可能需要UDP来继续项目,我想知道HTML6的规格是否支持UDP?
此外,是否有任何可靠的WebSockets基准测试可以将WS协议与低级直接套接字协议进行比较?
websocket ×10
node.js ×4
javascript ×2
rest ×2
socket.io ×2
xmpp ×2
c# ×1
html5 ×1
http ×1
java ×1
performance ×1
real-time ×1
stomp ×1
udp ×1
unit-testing ×1