我想连接到另一台服务器上的 wss。假设它的地址是:wss://123.123.123.12:8843
我有一个 nodejs/expressjs 应用程序。如何使用 socket.io 连接到它?我知道如何为服务器/客户端设置实现 socket.io,但如何为两台服务器(其中一台我无权访问)执行此操作。
如何设置我的expressjs应用程序以连接到wss?有没有办法使用 socket.io 或者我需要用另一种方式来做?
我正在使用 websocket (来自 的套接字dart:html),我想知道当用户关闭浏览器或退出页面时是否可以发送消息。
我尝试了onClose这样的事件:
ws = new WebSocket('ws://$hostname:$port/ws');
ws.onOpen.listen(onSocketOpen);
ws.onClose.listen((e) {
ws.send("I disconnected");
});
Run Code Online (Sandbox Code Playgroud)
但在这些特殊情况下它不会发送任何内容。或者,在我的服务器上我也尝试了这个,但是发生了以下onDone事件:
WebSocketTransformer.upgrade(req)
..then((socket) => socket.listen((msg) => doSomething(), onDone:() => print("connection closed)));
Run Code Online (Sandbox Code Playgroud)
这可行,但我想知道哪个客户端断开了连接(我想从实际断开连接的客户端发送一些内容的原因)。
有理由这样做吗?我真的不想查询所有其他客户端以了解当有人断开连接时他们是否仍然连接......
Spring Websocket 允许客户端(即浏览器)直接将消息发送到任何代理支持的目的地,即允许绕过服务器端应用程序进行直接的客户端到客户端通信。在现实世界中,我认为直接向消息代理公开公开写入访问权限是不可接受的。出于安全和消息完整性的原因,您通常希望只允许服务器应用程序通过代理向客户端发送任何消息。但我找不到任何有关如何实现这一目标的信息。默认行为是浏览器对代理目标具有不受限制的读+写直接访问权限。
我目前正在使用 Java 的 Pusher 库尝试 websockets。
如果互联网连接丢失,Pusher 会自动将其连接状态从“已连接”更改为“已断开”。然而,这似乎只有在断开连接 150 秒后才会发生。这是非常不幸的,因为在这 150 年间,很多消息可能会丢失,而事实上的旧消息仍然可以被视为最新的。
我如何知道最后收到的消息是否是最新的?或者有什么办法可以减少连接状态的超时时间?
这是我正在使用的推送器代码:
import com.pusher.client.Pusher;
import com.pusher.client.channel.Channel;
import com.pusher.client.channel.ChannelEventListener;
import com.pusher.client.channel.SubscriptionEventListener;
import com.pusher.client.connection.ConnectionEventListener;
import com.pusher.client.connection.ConnectionState;
import com.pusher.client.connection.ConnectionStateChange;
public class Testing {
public static void main(String[] args) throws Exception {
// Create a new Pusher instance
Pusher pusher = new Pusher("PusherKey");
pusher.connect(new ConnectionEventListener() {
@Override
public void onConnectionStateChange(ConnectionStateChange change) {
System.out.println("State changed to " + change.getCurrentState() +
" from " + change.getPreviousState());
}
@Override
public void onError(String message, String code, …Run Code Online (Sandbox Code Playgroud) 在我的网络应用程序中,我有 2 个 websocket 连接到同一端口上的服务器。一个 Websocket 用于聊天信使,同一页面上的另一个 Websocket 显示当前查看该事件的总人数。
聊天网络套接字:
var chat = new WebSocket("ws://localhost:8080/chat");
Run Code Online (Sandbox Code Playgroud)
我的聊天窗口上有一个发送按钮,当用户单击发送按钮时,将调用 send_message 函数,该函数通过 websocket 聊天将消息发送到服务器。
function send_message() {
chat.send("Hey There!");
}
Run Code Online (Sandbox Code Playgroud)
当从服务器收到消息时,我调用 onMessage 函数来获取数据。
chat.onmessage = function(evt) { onMessage(evt) };
function onMessage(evt) {
alert('Message Recived from server: "+evt.data);
}
Run Code Online (Sandbox Code Playgroud)
页面加载后,聊天 Websocket 就会打开,而当任何用户单击加入活动按钮时, attendeeCount Websocket 就会打开。如果有人加入或离开活动,我想向其他用户显示参加者数量增加或减少的实时更新。因此,假设一个用户正在参加一个活动,并且他现在看到的当前与会者人数为 10,而另一个用户加入了该活动,那么该人数应更新为 11。
当用户单击“加入活动”按钮时,将向服务器发出 ajax 调用,并在出席者表中创建一个条目。因此,一旦 ajax 调用在我的 ajax 调用的成功回调中成功,我将打开第二个 websocket 连接并将数据发送到服务器,以向其他用户显示更新的与会者计数。它就像 Facebook 的点赞一样,无需刷新页面即可在您眼前更新。
$.ajax({
type: 'POST',
url: '/mixtri/rest/event/updateAttendeeCount',
contentType: "application/x-www-form-urlencoded",
data: {data},
success: function(result){
var attendeeCount = new WebSocket("ws://localhost:8080/attendeeCount");
attendeeCount.onopen …Run Code Online (Sandbox Code Playgroud) 总的来说,我对 Tornado 和 Web 服务还很陌生。在我的应用程序中,我在服务器端有 Qt/c++ 客户端和 python Tornado。Qt 客户端以文本消息的形式发送命令。在服务器端,“on_message”方法接收消息,对其进行解析并调用相关脚本来生成 .png 图像。现在,我想将此图像连同图像的简短描述一起发送回客户端。如何在服务器端和客户端执行此操作?指向任何在线示例的指针也会有所帮助。谢谢。
我目前正在使用node.js 和socket.io 制作html5 游戏。游戏的基本原理是 4 个人绕圈移动,试图互相攻击……
我的问题是我应该使用 Websockets 还是 WebRTC?对于这种沟通来说,什么是最好的?4 名玩家点对点还是通过服务器?
请随意分享您的想法,我对这些东西还很陌生。
(注意:我故意websocket在这里放置了不充分的标签,因为这是 WebSocket 专家了解 Ratchet 架构的最佳机会)。
我准备实现 HTML5 服务器端事件,我需要的是服务器端解决方案。由于挂起 Apache 的每个连接一个进程(连接池限制、内存消耗...)是出于考虑,我希望Ratchet 项目能够有所帮助,因为它是维护最多的项目,并且它们拥有http与其他组件耦合的服务器。
我的问题是:我该如何使用它?不是用于升级http请求(默认用法),而是用于提供动态生成的内容。
到目前为止我尝试过什么?
Ratchet按照教程中的说明安装
测试过的 WebSocket 功能 - 工作正常
遵循描述http服务器组件的页面上给出的非常基本的指令集:
/bin/http-server.php
use Ratchet\Http\HttpServer;
use Ratchet\Server\IoServer;
require dirname(__DIR__) . '/vendor/autoload.php';
$http = new HttpServer(new MyWebPage);
$server = IoServer::factory($http);
$server->run();
Run Code Online (Sandbox Code Playgroud)
专家不应该知道MyWebPage这里需要声明类才能使服务器工作,但是如何声明呢?
Ratchet 文档似乎没有涵盖这一点。
我尝试与一些人建立视频组会议流,我使用 WebRTC(来自:https : //github.com/anoek/webrtc-group-chat-example),作为服务器,我使用安装了 node js 的 VPS Centos 7当我尝试启动我的 webrtc 服务器时,在浏览器中,我在使用端口访问 ip 时看到此错误
这个错误:
(index):260 Uncaught TypeError: navigator.getUserMedia is not a function
at setup_local_media ((index):260)
at Socket.<anonymous> ((index):50)
at Socket.Emitter.emit (socket.io-1.4.5.js:3)
at Socket.emit (socket.io-1.4.5.js:3)
at Socket.onconnect (socket.io-1.4.5.js:3)
at Socket.onpacket (socket.io-1.4.5.js:3)
at Manager.<anonymous> (socket.io-1.4.5.js:3)
at Manager.Emitter.emit (socket.io-1.4.5.js:3)
at Manager.ondecoded (socket.io-1.4.5.js:2)
at Decoder.<anonymous> (socket.io-1.4.5.js:3)
Run Code Online (Sandbox Code Playgroud)
JS代码:
/*************/
/*** SETUP ***/
/*************/
var express = require('express');
var bodyParser = require('body-parser')
var cors = require('cors')
var main = express()
main.use(cors())
var server …Run Code Online (Sandbox Code Playgroud) 尝试在 Heroku 上使用 ws 部署我的应用程序。在我的本地机器上一切正常,但在 Heroku 上部署后,我收到响应状态为 200 的握手错误
这是我的服务器代码:
const WebSocketServer = require('ws').Server;
const moment = require('moment');
const app = require('./app');
const wss = new WebSocketServer({ app });
const connections = new Set();
wss.on('connection', (ws) => {
connections.add(ws);
ws.on('message', (message) => {
const time = moment(new Date()).format('HH:mm');
const messageData = {
time,
message,
};
for (const connection of connections) {
connection.send(JSON.stringify(messageData));
}
});
ws.on('close', () => {
connections.delete(ws);
});
});
Run Code Online (Sandbox Code Playgroud)
还有我的客户端代码:
const HOST = location.origin.replace(/^http/, 'ws');
const ws = …Run Code Online (Sandbox Code Playgroud)