Tag: 套接字

Web Audio Api:通过套接字从nodejs服务器播放数据块的正确方法

我正在使用下面的代码来解码nodejs套接字的audio块 window.AudioContext = window.AudioContext || window.webkitAudioContext; var context = new AudioContext(); var delayTime = 0; var init = 0; var audioStack = []; var nextTime = 0; client.on('stream', function(stream, meta){ stream.on('data', function(data) { context.decodeAudioData(data, function(buffer) { audioStack.push(buffer); if ((init!=0) || (audioStack.length > 10)) { // make sure we put at least 10 chunks in the […]

游戏中的大滞后node.js和socket.io(实时)

我有一个与socket.io很大的问题,这使得我的实时游戏无法播放。 我希望我的node.js服务器每20ms向每个连接的客户端发送数据(每个套接字) 但是我注意到客户端每20ms收不到一次,每100-200ms多收一次。 这使得游戏完全无法玩(非常大的滞后) 本地它工作得很好。 你能帮我吗 ? 这是我的函数发送数据(服务器端)的一段代码: function sendData() { playersList.forEach( (player) => { let data = []; // code which add data to "data" variable socketsList[player.id].emit('refreshGame', JSON.stringify(data)); }); setTimeout(sendData, 20); } sendData();

几个node.js进程之间的通信

我有3个node.js应用程序(A,B,C)。 A是一个入口点,我喜欢所有到这个入口点的请求被redirect到B或C(取决于请求中参数的值)。 目前我正在做一个res.redirect在A(我使用expressjs框架)。 这工作正常,但它不是真正透明(我可以从外面看到,原来的请求已被redirect)。 为了解决这个问题,我将B和C监听套接字而不是端口号,但是我不知道如何将请求redirect到B或C使用的套接字。 任何想法如何有2个node.js进程通过套接字进行通信? **更新** I have changed the code of A to use node-proxy: app.all('/port/path/*', function(req, res){ // Host to proxied to var host = 'localhost'; // Retrieve port and build new URL var arr_url = req.url.split('/'); var port = arr_url[1]; var new_url = '/' + arr_url.slice(2).join('/'); console.log("CURRENT URL:" + req.url); // […]

如何开始使用套接字为iOS构build实时networking游戏?

始终想要为iOS构build一个实时和networking游戏,从今天开始。 在互联网上search了很多关于最好的技术方法,我发现很多,但我从哪里开始缺less指针。 这是我的想法。 看起来通过UDP的套接字连接是一个不错的select,因为它的延迟低,我不在乎数据包是否到达(只要有一个新的时间)。 这就排除了http,但是你需要什么呢?-)。 我一直在阅读关于Nodejs和socket.io,这些不错的select? 我希望它尽可能地低层次,保持一个整洁的编程语言的专业人士和数据库的广泛支持。 当然,与iOS结合的东西(不pipe是普通的NSStream还是更高级的库)也是必须的。 任何指针,build议或考虑非常感谢! 亲切的问候, 雷因德

获取node.js套接字closures/结束事件上的远程端点属性

我有一个node.js服务器跟踪所有连接到它的“客户端”,使用一个关联数组的套接字,因为我需要发送一些数据到特定的客户端有时。 该数组中的键是由…组成的string socket.remoteAddress + ':' + socket.remotePort 并且值是传递给提供给net.createServer(…)的callback的套接字实例。有时,客户端因为某种原因断开连接,我收到“结束”,然后“closures”事件。 我想从我的客户端registry中删除断开连接的客户端,但在close / end事件callback中,remoteAddress和remotePortvariables未定义。 他们可以以某种方式检索? 为了显示: var registry = {} var server = net.createServer(function (socket) { socket.on('connect', function(){ registry [socket.remoteAddress + ':' + socket.remotePort] = socket; }); socket.on('close', function(had_error){ // ****************************************************** // socket.remoteAddress and remotePort are undefined here // ****************************************************** var id = socket.remoteAddress + ':' + socket.remotePort; […]

NodeJS套接字数据分割

当我需要拆分数据时,我必须将其转换为string。 这是我的数据处理函数: socket.on('data', function (data) { var str = data.toString().split("|"); switch(str[0]){ case "setUser": setUser(str[1], socket); break; case "joinChannel": joinChannel(str[1], socket); break; } }); 当我从AS3客户端发送像“setUser | Name”,然后“joinChannel | main”的数据。 NodeJS将其作为一个数据包读取。 我的问题是如何使这两个不同的数据包?

从C#连接到node.js服务器

我试图写一个简单的服务器,.NET客户端可以连接到交换消息。 来自任何客户的任何消息都将发送给所有其他消息。 node.js + socket.io似乎是一个很好的方式去这里,但我有麻烦。 我使用来自socket.io站点的示例代码,当我从浏览器连接到它时,控制台会根据需要跟踪所有连接和心跳事件,所以我认为我至less已经正确地设置了环境。 我的客户端代码(下面粘贴)与Socket类的示例代码非常相似,但它的行为很奇怪。 在“ProcessConnect”处理程序中,e.LastOperation ==“Connect”和e.SocketError ==“Success”,但服务器端的连接事件处理程序不会触发。 另外奇怪的是,当代码发送“Hello World”时,接收处理程序也会被“Hello World”发回。 我知道这不是来自服务器,因为服务器上没有代码来执行此操作。 我想也许套接字连接到自己或某事,但如果我closures服务器,连接失败。 显然有一些基本的东西我错过了.NET套接字,但我不知道它是什么。 客户: public class NodeClient { Socket _Socket; public NodeClient() { SocketAsyncEventArgs socketState = new SocketAsyncEventArgs(); socketState.Completed += SocketState_Completed; socketState.RemoteEndPoint = new DnsEndPoint("localhost", 81); _Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); _Socket.ConnectAsync(socketState); } private void SocketState_Completed(object sender, SocketAsyncEventArgs e) { if […]

Java – > TCP – > node.js(string数据传输)

客户端(Java) Socket tcpClient = new Socket("localhost", 6000); String msg ="test"; DataOutputStream os = new DataOutputStream(tcpClient.getOutputStream()); PrintWriter pw = new PrintWriter(os); pw.println(msg); pw.flush(); 服务器(node.js JavaScript) var net = require('net'); var server = net.createServer(function (c) { //'connection' listener log('Java client connected to this nodeServer'); c.on('data', function (data) { console.log(data); }); c.on('end', function () { console.log('nodeServer disconnected'); }); […]

Node.js socket.io函数不在服务器和客户端之间发送

首先我想就我的问题中的任何错误道歉,这是我的第一个家伙! 我正在尝试使用下面的代码来testing我的服务器和客户端之间的连接。 这是如何工作:一个套接字启动在某个端口,然后客户端尝试连接到该端口,连接部分成功,这意味着“节点server.js”启动连接,当我在我的浏览器上的本地主机:8000'的HTML页面生成,但是当我点击button什么都没有发生。 index.html代码 <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script> $(document).ready(function() { var socket = io.connect("localhost:8000"); $("#join").click(function() { var name = $("#name").val(); if (name != "") { socket.emit("join", name); } }); socket.on("update", function(msg) { $("#msgs").append("<li>" + msg + "</li>"); }); }); </script> </head> <body> <input type="text" placeholder="Yor name" id="name"> <input type="button" name="join" id="join" value="Join!"> […]

在node.js中的TCP聊天服务器架构…将数据库或内存中的套接字保存?

我正在计划在node.js + mongo数据库的TCP聊天服务器..这是我正在考虑的架构 – 在mongo数据库中创build一个集合“online_users”这个集合将拥有所有的在线用户,一旦用户下线,我将从这个集合中删除这些用户。 创build一个集合“房间”..在这个集合我打算存储房间名称(包括在房间里的用户名csv)和参与者在这个房间.. 用于存储用户的聊天历史的历史集合。 现在我正在考虑在“房间”集合中的数据库存储套接字连接,但我不知道如果我应该这样做,或在arrays中存储套接字连接? 这里是我正在思考的数据库的stream程 – 如果用户A开始与B和C聊天,那么我将创build一个新的房间“A,B,C”。 我将发送这个房间名称给客户端,聊天客户端在发送新的聊天消息时必须通过这个房间名称。 当用户在聊天中发送消息时,我将检查他们在哪个房间,并从数据库获取每个人的套接字连接,并将该消息广播给B和C. 请注意,我是node.js和聊天服务器的新手,所以我对这个体系结构有任何build议。 另外,如果你有TCP聊天服务器架构/聊天服务器数据库架构的任何链接..那么请分享您的意见/答案。 任何帮助,我非常感谢! 更新1:另外我不知道如果我可以在数据库中存储套接字对象:( ..序列化可能工作吗?让我知道这个想法。