Tag: 套接字

socket.io:如何控制和检查消息stream?

可以说我们有鲍勃和爱丽丝: 鲍勃向爱丽丝发送一个问题,如果爱丽丝得到这个问题,爱丽丝将回答鲍勃,如果鲍勃得到答案,通信完成! 场景: 在io.to('alice').emit('question'); 爱丽丝失去了她的连接,并断开连接,我们使用disconnect事件,并发送通知给鲍勃: io.to('bob').emit('hey bob alice is disconnected and she did not received your question); 在发射过程中突然断开连接并重新连接! 它们之间似乎没有任何实际的转移,对吗?我们怎么能在服务器上捕捉到这种场景呢? socket.io(node.js)中是否存在任何callback或者其他东西,使我确信消息传递给爱丽丝?

通过letsencrypt进行https安装后,Nodejs聊天程序'io未定义'错误

我在我的网站上设置了一个nodejs聊天程序。 然后,当我使用letsencrypt将网站从http移动到https时,聊天程序停止工作。 这里是服务器和客户端: https://synodins.com/apps/chat/server.js https://synodins.com/apps/chat/client.html 并直接阅读客户端脚本: https://synodins.com/apps/chat/client.txt 问题是,正如你可以看到在客户端检查元素,是我得到错误: ReferenceError:io没有定义 我已经search了这个错误,发现: socket.io – ReferenceError:io没有定义 但是我已经按照他在答案中提出的方式来做事了。 我不知道是什么问题,虽然我怀疑在客户端加载的socket.io模块有问题。 有趣的是,我可以在本地运行聊天没有问题,但是当我尝试在服务器上运行它,我得到这个错误。 有谁可以看到问题是什么?

ExpressJS,MongoDB + Socket.IO – 识别单个用户会话

我使用https://github.com/sahat/hackathon-starter/tree/es6 。 我添加了Socket.IO,但无法find安全获取当前login用户信息的方法。 我有一个button,当按下时,我想发送到服务器(用户名,余额和金额,所以我可以安全地更新他们的模式模型…到目前为止,我能够如此与玉,但我敢肯定,这是非常糟糕的。 玉: .content-r-inner.child .col-md-12.col-xs-12.col-lg-12.no-pad-home if !user include partials/flash include partials/visitorbar else include partials/userbar | #time.timecontainer.pulsing.pulsingbox | .product Product: | input#amount(type='text') | #slider-range-max | #minus1.minus.unselectable – | #plus1.plus.unselectable + // </div> .sendAmount(onclick="GetAmount()") // inside include partials/userbar I have GetAmount Function function GetAmount(){ socket.emit('getAmount', { "username": "#{user.username}", "maxBalance": "#{user.balance}", "getAmount": document.getElementById('amount').value }); } {user.username}你可以看到里面的标签… […]

在nodeJs中,socket.io方法在webstorm中没有解决

我在节点学习socket.io,我已经安装了模块使用 – npm install socket.io –save 这是我的代码 var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); app.get('/', function(req, res){ res.send('index.html'); }); io.on('connection', function(socket){ console.log('a user connected'); }); http.listen(3000, function(){ console.log('listening on *:3000'); }); 但webstorm是说,“开”尚未解决..请帮助

React Native – 后台模式下的Web Socket

我正在开发一个使用反应原生的应用程序,我使用WebSocket与后端进行通信。 即使在后台模式下,我也希望套接字处于活动状态。 我在这里find相关的文章: 如何处理应用程序在后台的套接字连接的事件? 基本上说这是不可能的。 但是,我在模拟器上本地尝试,通过使应用程序进入后台模式,套接字不断接收数据(由远程debugging中仍然发生的日志certificate)。 所以我的问题是,套接字保持活动,甚至应用程序进入后台模式? 或者它只是活跃,因为它只在模拟器上(没有尝试过真正的设备,我的iPhone iOS版本太旧了)。 如果发生这种情况是因为它只是模拟器,除了推送通知之外是否有解决scheme? 附上截图。 提前致谢

nodejs tcp socket发送多个数据事件

我试图通过用tcp包编码来演示http服务器如何工作的最简单的方法。 我之前做了几次,但今天我面临一个意想不到的行为,因为来自套接字对象的data事件被随机触发一个或多个类似的请求,我想知道为什么,以及如何正确地解决它。 请注意,我知道我应该使用stream数据处理方式,这是我在第二次演示中所做的。 每一次都会增加复杂性,使演示文稿更容易​​遵循。 这是服务器。 正如你所看到的,它很简单,容易得到。 const net = require('net') const response = `HTTP/1.1 200 OK Access-Control-Allow-Origin: * Foo: Bar foobar ` net.createServer(socket => { socket.on('data', buffer => { console.log('—– socket data', Date.now()) console.log(buffer.toString()) socket.write(response) socket.end() console.log('—–') }) socket.on('end', () => console.log('—– socket end.')) socket.on('close', () => console.log('—– socket close.', '\n')) }).listen(2000) 为了testing我的服务器,我只要打开任何Web浏览器到http://localhost:2000并获得响应; 但是当使用下面的有效负载(使用浏览器的JavaScript控制台)时, 有时候数据事件会被触发两次,最终导致一个错误,因为write/end进程不能再次进行。 […]

Heroku的应用程序与socket.io崩溃

应用程序,一个旨在与Unity客户端通信的API服务器工作得很好,直到我添加了套接字。 使用chrome扩展socket.iotesting仪手动testingsocket.io,certificate它在本地机器上运行得非常好。 现在我已经将它部署到heroku,它不起作用。 它立即崩溃。 通常情况下,对这个问题的答案都是关于没有被正确设置的端口,但在这种情况下,我已经把端口设置为process.env.PORT,所以不应该有任何问题。 我的应用程序工作得很好,直到我添加了socket.io。 这是我的基本服务器文件: import express from "express" import mongoose from "mongoose" import http from "http" import config from "./config/index.js" mongoose.Promise = global.Promise // mongo mongoose.connect(config.mongo.uri) mongoose.connection.on("error", function(err) { console.error("MongoDB services error: " + err) }) // server let app = express() let server = http.createServer(app) let socketio = require("socket.io")(server) require("./socketio").default(socketio) require("./express").default(app) […]

socket.io-stream将文件写入光盘,然后完成后发出文件path

当我从客户端发送文件到服务器时,我有一个使用socket.io-stream的问题。 我将文件path推送到mongodb,然后将文件保存到文件文件夹。 问题是,当光盘写入文件时,文件path在写入完成之前返回给客户端,然后img元素paht正确,但图像不在页面上呈现。 下面的代码按照预期工作,但手动等待100毫秒,然后返回到客户端的path。 如果图像太大,这100毫秒将不会保证。 任何其他解决scheme 服务器端: ss(socket).on('fileUpload', function(stream, data) { Chat.findByIdAndUpdate(data.roomId, { $push: { "messages": { author: data.author, date: Date.now(), isFile: true, extension: data.extension } } },{safe: true, new: true, upsert: true}, (err, message) => { if(err){ console.log(err); } let msg = message.messages[message.messages.length – 1]; let filename = path.join(__dirname, 'public/files' , `${msg._id}.${msg.extension}`); stream.pipe(fs.createWriteStream(filename)); setTimeout(() […]

TypeError:无法读取未定义的属性“emit”

问题是,每当我尝试着触发“this.io.emit”事件发生TypeError。 只有当我在“socket.on”块中写这个语句“this.io.emit”时才给出,否则,如果我把它写在这个块之外,它就不会产生错误。 这是调用其他库的主要server.js文件: const express = require('express'), http = require('http'), socketio = require('socket.io'); class App{ constructor() { this.port = process.env.PORT || 81; this.host = `localhost`; this.app = express(); this.http = http.Server(this.app); this.socket = socketio(this.http); } appConfig(){ new config(this.app); } appRoutes(){ new routes(this.app,this.socket).routesDefault(); } appDefault(){ this.appConfig(); this.appRoutes(); this.http.listen(this.port,this.host,()=> { console.log(`Listening`); }); }} 我的服务器端代码是: 'use strict'; class […]

NetworkStream写入()与事件名称

我有一个用C#编写的简单的TCP服务器,以指定的时间间隔ping数据,并接收到我有NodeJS应用程序的数据。 我目前正在从NetworkStream发送数据,如下所示: private NetworkStream nwStream; nwStream = clientMachine.GetStream(); nwStream.Write(buffer, 0, buffer.Length); // Inside a loop 并在NodeJS中接收它,如: client.on('data', (data) => { 除了我的C#TCP服务器的data之外,还有什么办法可以发出不同的事件吗? 使用Socket.io我可以socket.emit('customEvent', someData)并接收它像socket.on('customEvent', receivedData)但我不确定是否可以在C#中实现这一点。 我没有使用Socket.io,上面只是我想实现的行为的一个例子。