我想发送一个 websocket,使用 express-ws 从不同的控制器发送出去,而不是通过路由,我在 server.js 中有以下代码:
var SocketController = require('./routes/ws.routes');
var app = express();
var server = require('http').createServer(app);
var expressWs = require('express-ws')(app);
app.ws('/', SocketController.socketFunction);
Run Code Online (Sandbox Code Playgroud)
SocketController 看起来像这样:
exports.socketFunction = function (ws, req) {
ws.on('message', function(msg) {
console.log(msg);
ws.send("hello");
});
}
Run Code Online (Sandbox Code Playgroud)
是否可以调用
ws.send()
来自另一个控制器的事件?我如何获得“ws”对象?
谢谢!
我正在为分类广告网站制作 chrome 扩展程序。使用 chrome 扩展程序,用户将能够从他们观看的类别/搜索查询中获取最新列表。
我已经在使用 websocket 服务器向用户发送通知,但是这样我必须始终为每个用户打开一个套接字连接。
我的第二种方法是使用Firebase,但这只会在用户单击图标时运行通知(如我所见),我宁愿从我的服务器完成此操作
__
是否有其他可能的解决方案可以在用户不点击图标的情况下向 Chrome 扩展程序发送通知?
google-chrome websocket google-chrome-extension firebase-cloud-messaging
从几天开始,我一直在搜索社交网络或问答网站如何获得实时通知。我开始了解订阅者-发布者模式。我开始知道实时更新是使用 WebSockets 获取的。Websocket 发布一个端点,客户端订阅该端点并不断获取任何更改的更新。
但是我从网上得到的例子都是聊天应用程序。但我的要求是从 MySQL DB 获取实时通知。所以我有几个问题
如果我的模式是对的,我不知道如何将 WebSocket 连接到 Mysql。任何帮助/指导都非常感谢。
更新:
经过一些更多的网络搜索:
1. 由于我正在为我的网站创建 Rest Webservices,AJAX 是实现通知功能而不是 WebSockets 的更好方法吗?
2. WebSockets 的实现是否比击中 Rest 端点的 AJAX 调用复杂(因为两者的目的是相同的,以获得通知)?
我正在尝试使用 websocket.WebSocketApp,但是它出现了错误:模块“websocket”没有属性“WebSocketApp”
我查看了以前的解决方案,并尝试卸载 websocket,安装 websocket-client,但仍然出现相同的错误。
我的文件的名称是 MyWebSocket,所以我认为它与此无关
有人可以帮我吗?
我正在为一个基于 Java 的大型 web 应用程序设计一个新的聊天模块,该应用程序默认使用 Tomcat,但支持我们的一个客户端的 WebLogic。我一直在研究为此目的使用 WebSocket,但我发现 WebSocket servlet 似乎没有通用接口,例如javax.servlet.http.HttpServlet.
因此,考虑到我可能需要为我希望使用的每个 servlet 容器定义不同的 servlet 实现,我该如何处理我 100% 不知道我在哪个容器中的情况?
我正在运行 http4s WS 示例:https : //github.com/http4s/http4s/blob/master/examples/blaze/src/main/scala/com/example/http4s/blaze/BlazeWebSocketExample.scala
我正在尝试从 google chrome 控制台连接到它:
var ws = new WebSocket("ws://localhost:8080/http4s/wsecho")
ws.send("Hi")
Run Code Online (Sandbox Code Playgroud)
但实际上我看不到任何消息。在控制台日志中我看到
Uncaught DOMException: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.
at <anonymous>:1:4
(anonymous) @ VM204:1
VM186:1 WebSocket connection to 'ws://localhost:8080/http4s/wsecho' failed: Connection closed before receiving a handshake response
Run Code Online (Sandbox Code Playgroud)
并且服务器日志不包含错误:
23:12:43 [blaze-nio1-acceptor] INFO o.h.blaze.channel.ServerChannelGroup - Connection to /127.0.0.1:59777 accepted at Tue Mar 20 23:12:43 GST 2018.
23:12:43 [blaze-nio-fixed-selector-pool-3] DEBUG org.http4s.blaze.pipeline.Stage - SocketChannelHead starting up at Tue Mar 20 23:12:43 GST 2018 …Run Code Online (Sandbox Code Playgroud) 所以我创建了一个新的 Web 应用程序,它使用 WebSocket 到 Node.JS WebSocket 服务器。现在 Node 服务器完成了它需要的一切工作并且完美地工作。我的问题是浏览器的实现。
我已经查看了许多其他人在答案中给出的库,但我想看看它们是否是一种更好或更干净的方法来做到这一点。
因此,在我的实例中,我基本上创建了一个对象,该对象包装了 WebSocket,然后通过调用 connect( url )使用 setInterval 重新连接,这将创建另一个 WebSocket 实例。
我一直在查看连接和客户端,似乎如果连接关闭,比如服务器出现故障,或者发生了什么事情,看起来有时,在更长的时间内,WebSocket 连接会增加一倍,所以相反每个客户端 1 个连接,它是 2、3 还是 4...?
我有一种感觉,这是因为我每次都在创建一个新的 WebSocket 实例?
代码如下:
// Main Function
function WSWrapper() {
// Variables
this.socket = null;
this.enabled = false;
this.retry = false;
// Connect
this.connect = function(address) {
// Sets the address
this.address = address;
// Creates the websocket connection
this.socket = new WebSocket(address);
// On message event handler
this.socket.onmessage = function(event) {
// …Run Code Online (Sandbox Code Playgroud) 目前正在Socket.IO使用 websockets。我有几个关于如何在 chrome devtools 中解释 websockets 的问题:
当我们在 chrome 中有以下输出时:
HTTPget 方法动词指定。这是因为这个HTTP协议是用来发起握手的吗?我尝试通过 Thruway 设置一个可以管理多个组的 websocket 服务器。类似于聊天应用程序,每个客户端可以同时订阅一个或多个,并将消息广播到整个聊天室。我设法用一个古老版本的 Ratchet 做到了这一点,但由于它运行得不是很流畅,我想切换到高速公路。可悲的是,我找不到任何可以管理群组的东西。到目前为止,我作为 websocket-manager 有以下内容,并且客户端正在使用 Autobahn|js (18.x) 的当前版本。
有没有人知道是否可以使用以下内容管理订阅组?
<?php
require_once __DIR__.'/../vendor/autoload.php';
use Thruway\Peer\Router;
use Thruway\Transport\RatchetTransportProvider;
$router = new Router();
$router->addTransportProvider(new RatchetTransportProvider("0.0.0.0", 9090));
$router->start();
Run Code Online (Sandbox Code Playgroud) var data = bar();
function bar() {
var result;
socket.emit('message', 'test');
socket.on('msg', function(message) {
result = message;
});
return result;
}
Run Code Online (Sandbox Code Playgroud)
在这里,结果值是undefined。如何将从socket.on函数中检索到的值分配给result变量并返回?
这是我接收socket.io消息事件的另一端。
var io = require('socket.io').listen(server);
io.sockets.on('connection', function(socket, username) {
socket.on('message', function(message) {
var result = 'test value'
socket.emit('msg', result);
});
});
Run Code Online (Sandbox Code Playgroud)
试图在确认中返回一个对象。
io.sockets.on('connection', function (socket) {
socket.on('message', function(message, ackCallback) {
console.log("server received message", message);
var result = tools.execute(message);
console.log(typeof(result)); // result is returned a object
ackCallback(result);
});
});
Run Code Online (Sandbox Code Playgroud)
PS我试图传递一个简单的对象
var …Run Code Online (Sandbox Code Playgroud)