Articles of 套接字

在Google App Engine上部署socket.io

如何在App Engine上部署和运行Node.js中编写的socket.io服务器。 它是否支持? 如果不是我可以使用什么替代scheme 这是我的sockets: var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); app.get('/', function(req, res){ res.sendFile(__dirname + '/index.html'); }); io.on('connection', function(socket){ console.log('a user connected'); socket.on('disconnect', function(){ console.log('user disconnected'); }); socket.on('subscribe', function(room) { console.log('joining room', room); socket.join(room); }); socket.on('send message', function(data) { console.log('sending room post', data.room); socket.broadcast.to(data.room).emit('conversation private post', data.message) }); […]

如何照顾与Socket.io通信的networking故障

我正在devise一个使用Socket.io,Nodejs,Expressjs,Redis,Angularjs的系统,在这个系统中消息传递非常重要。 用例: 我的系统需要侦听可以在多个用户之间共享的资源通知。 套接字连接到服务器与资源的信息,以便我可以维护每个资源的套接字列表。 当有资源的通知时,我会在每个套接字上为该资源发送通知。 ResourceID1 = ["scoketID1", "socketID2"] // Two sockets listening to ResourceID1 我更新套接字断开此列表还通过删除该特定的套接字ID出或资源ID列表。 通过这种方式,我确保将通知发送给共享资源的每个用户以及该用户的每个会话以及每个可以是一个会话的多个选项卡的套接字。 总之“每个sockets”。 我也维护资源通知的散列,以便每次有资源的新通知特定的资源通知散列将被更新。 ResourceID1-notificationHash : { key1:"124", key2: "abc" } 这样做的原因是,如果套接字断开像用户closures选项卡或更重要的是因为某些原因用户互联网断开连接。 并且服务器不会再次收到心跳套接字连接,并将该资源的最后一条消息发送到该套接字。 为了确保特定的套接字(客户端)总是收到消息是我的执行足够? 我知道我可以实现一个事件的callback,但是我所做的是当一个特殊的选项卡(套接字)被断开,再次连接我发送该资源的最后一条消息。 是否有其他networking故障,可能导致可靠的消息传递的问题? 我的实现是不同的,因为对于消息传递,我不考虑用户,我正在考虑sockets,可以是一个用户可以多个sockets,就像一个用户可以在同一时间有多个会话可以说在Firefox和铬,然后为每个他可以打开多个选项卡。 select套接字的原因是我的资源可以在多个用户之间共享,所以对于一个资源更新,我可能不得不将消息发送给多个用户,每个用户有多个会话,每个会话有多个套接字。

this.zone.run() – Nzone的错误

我有一个问题,帆+帆sockets + angular4 import { Component, OnInit, NgZone } from '@angular/core'; import { routerTransition } from '../../router.animations'; import { Http } from '@angular/http'; import * as socketIOClient from 'socket.io-client'; import * as sailsIOClient from 'sails.io.js'; @Component({ selector: 'app-tables', templateUrl: './tables.component.html', styleUrls: ['./tables.component.scss'], animations: [routerTransition()] }) export class TablesComponent implements OnInit { io:any; smartTableData:any; constructor(public http: […]

socket.io net :: ERR_CONNECTION_TIMED_OUT错误

我有一个网站与实时聊天工作本地主机没有错误,但在服务器上我得到这个错误: http://my.domain:52398/socket.io/?EIO=3&transport=polling&t=LuZMbMn net::ERR_CONNECTION_TIMED_OUT i.create @ socket.io.min.js:2 i @ socket.io.min.js:2 o.request @ socket.io.min.js:2 o.doPoll @ socket.io.min.js:2 n.poll @ socket.io.min.js:2 n.doOpen @ socket.io.min.js:2 n.open @ socket.io.min.js:2 n.open @ socket.io.min.js:2 n @ socket.io.min.js:2 n @ socket.io.min.js:1 n.open.n.connect @ socket.io.min.js:1 (anonymous) @ socket.io.min.js:1 server.js文件内容的一部分是: var express = require("express"), http = require('http'); var app = express(); var server = http.createServer(app); […]

下载人物头像并将其显示在node.js中

最近我变得真正有兴趣在node.js中做我自己的聊天。 我已经做了很多事情(例如注册和login),但是我遇到了一个问题:我需要在朋友列表中显示人物的头像,看起来像这样: test friend list 那些灰色圆圈是一个img标签(这将是默认的空白图片),并且应该被replace为替身。 但是,我不知道什么是通过请求发送图像到客户端的正确方法。 我使用socket.io为了沟通和发送JSON,但我相信你不能通过socket.io发送图像(或文件?)。 我在互联网上发现的唯一信息是关于使用AJAX请求上传文件到服务器,这是有用的,但仍然不告诉我如何问服务器的图片。 var id = 0; function addFriendElement() { $().add( '<div class="personTab" onclick="makeActive(this);">' + '<div class ="smallAvatar"><img src="img/testAvatar.png" alt="No avatar?"></div>' + '<div class ="nickname">' + id + '</div>' + '</div>').appendTo("#friendList"); id++; } 这就是我添加屏幕截图中看到的那些“标签”。 我想知道是否使用img标签也是不正确的。 提前致谢!

客户端的socket.io错误

我花了几天的问题。我想用socket.iobuild立一个页面。 我是node.js & socket.io的开端。 我读了socket.io文档,并逐步构build页面。 然后我得到一个错误, Uncaught ReferenceError: io is not defined 但我可以从http://localhost:3000/socket.io/socket.io.js获取js内容 我使用var socket = io.connect('http://localhost')或在客户端使用var socket = io() 。 这两个都不行,我做什么? 这是我在服务器端的代码: var app = express(); var http = require('http').Server(app); var io = require('socket.io')(http); var port = 3000; http.listen(port, function(){ console.log('Server listening at port %d', port); }) 在客户端: var socket = io(); socket.on('news', function(data){ […]

如何不使用sendHandle丢失数据?

Node.js的child_process文档说 可以传递给subprocess.send()的可选sendHandle参数用于将TCP服务器或套接字对象传递给subprocess…在套接字中接收和缓冲的任何数据都不会发送给subprocess。 所以如果传递一个套接字到一个subprocess,我怎么不会丢失caching的数据呢? 在发送它之前,我在套接字上调用了socket.read()来检查缓冲数据。 它返回null ,但数据仍然丢失。 如何将套接字从一个进程传递到另一个进程而不丢失数据?

PHP + MySQL + Socket.io – 实时在线状态的朋友

我使用PHP / MySQL和node.js(socket.io)创build了一个类似于facebook的实时聊天应用程序,但是我现在面临以下问题。 脚本 login的用户有一个类似Facebook的朋友列表,当他的任何朋友离开,离线,在线等我想他的朋友列表实时更新,而无需重新加载整个朋友列表,例如ajax轮询每x秒。 login用户在网站上进行的每一个操作 ,比如页面的变化,新的聊天窗口,search,或者我有一个名为last_active ,用当前的unix_timestamp进行更新。 这是为了跟踪用户在线或离开。 如果时间戳大于300秒,则用户离开。 每三十秒钟一次 ,数据库last_online用户login的unix_timestamp更新last_online列。 这是为了跟踪用户在线。 如果时间戳大于35秒,我们可以认为他已经closures了窗口,将被视为离线,而不是离开。 用户也可以手动设置他的在线状态为繁忙,不可见等,并且这被设置为login用户的列的custom_status 。 上面的一切工作,因为它应该提供,用户总是重新加载页面,看看他的朋友有什么在线状态,但我希望这是实时更新,而不是当重新加载整个页面或使用Ajax轮询来重新加载整个朋友列表。 我正在考虑在客户端比较当前的在线状态,当发生变化的时候发送到socket.io。 然后,我遍历所有连接的客户端,并向所有连接的朋友发出用户新的在线状态。 但是,我想这将有性能问题,当说例如1000个用户连接? 你将如何处理?

用于高频率数据stream的多个套接字或更大的数据包?

我正在使用NodeJS与服务器(用C编写)公开的套接字进行通信(作为客户端)的应用程序。 服务器从传感器发送数据,客户端只是绘制它。 假设我有100个图表和100个传感器。 我应该用100个不同的端口打开100个套接字还是应该通过发送更大的数据包在套接字内创build某种虚拟通道? 现在,我发送100个字节的50Hz,每个字节只是虚拟传感器数据( uint8 )。 更进一步,我们可能会转向uint32以适应传感器数据输出,仍然以50Hz传输。 这意味着每个数据包在50Hz时将是400字节。 简而言之:包内有多个套接字或虚拟数据通道?

vue的socket.io连接尝试返回“否”访问控制允许来源“标题存在”错误即使已设置的来源

我一直在试图debugging这几天,我已经有一个其他应用程序的套接字的经验,但它是在同一个域,我不认为我会遇到这个跨域的麻烦vue.js应用程序虽然 我一直在尽我所能debugging这些,基本上已经尝试了所有我能想到的东西。 在node.js服务器中,我已经设置了起源 let io = require('socket.io')(http, {origins: '*:* agora.dev:*'}) 然后我聆听与之的联系 io.on('connection', (socket)=>{ console.log('connection received') }) 但没有连接。 而在vue应用程序页面的控制台,我得到的是这些404错误说 https://gyazo.com/0197aaa3d12ba37d852d3d4b136f2afa agora.dev/:1 XMLHttpRequest无法加载http://agoraserver.dev/socket.io/?EIO=3&transport=polling&t=Lwj7pq6 。 请求的资源上没有“Access-Control-Allow-Origin”标题。 Origin'http: //agora.dev '因此不被允许访问。 该响应具有HTTP状态码404。 我正在使用vue.js webpack模板,以及vue-socket.io包和socket.io-client包。 所以我的main.js vue应用程序文件看起来像这样 import Vue from 'vue' import App from './App' import router from './router' import socketio from 'socket.io-client' import VueSocketIo from 'vue-socket.io' var SocketInstance = socketio('http://agoraserver.dev') […]