我正在尝试运行此webrtc 客户端/信令服务器代码,但是在使用我按照本教程的说明创建的新自签名证书运行服务器后,我chatclient.js无法连接到套接字服务器:
connection = new WebSocket('wss://localhost:6503/', 'json');
Run Code Online (Sandbox Code Playgroud)
这是 chrome 控制台显示的错误:
(chatclient.js:106) WebSocket connection to 'wss://localhost:6503/' failed:
Error in connection establishment: net::ERR_CERT_COMMON_NAME_INVALID
Run Code Online (Sandbox Code Playgroud)
然后我从 chrome 访问https://0.0.0.0:6503/(服务器正在侦听端口 6503),这是 chrome 检查器的安全选项卡:
我猜想我需要在生成 ssl 证书期间设置正确的通用名称,我当前将其设置为0.0.0.0:6503.
我应该设置什么?由于这是一个 websocket 的地址,我不知道该写哪一部分?
我正在使用 websocket 协议和 STOMP 作为消息协议为网络平台开发聊天模块。
这是我第一次使用任何消息代理,Kafka 是在公司(我正在工作的)网络平台上使用的消息代理,我猜是用于其他模块。之前我刚开始时使用的是 RabbitMQ,现在我必须切换到 Kafka。我在RabbitMQ的网站上看到有一整篇关于如何使用STOMP的文章,但是Kafka的官方网站上没有这样的东西。
但我探索了其他几个来源、许多教程,但找不到任何与 Kafka 一起使用 STOMP 协议相关的内容,这让我问这是否可能?
这是我的 websocket 配置类:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer{
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/topic");
//Here's the line I wrote to use Kafka as a MB, but doesn't work
registry.enableStompBrokerRelay("/topic").setRelayHost("localhost").setRelayPort(9092);
Run Code Online (Sandbox Code Playgroud)
启动 Kafka,然后运行我的 Java Spring 应用程序后,我从 java.io.IOException 中收到“连接由对等方重置”,如果一切正常,则不应抛出该异常。
我使用 Kakfa 的 2.2.0 版本、Zookeeper 的 3.4.14 版本,并使用 STS 3 作为我的 IDE。
任何帮助,将不胜感激。
我正在尝试用 JS 制作简单的 Tic-Tac-Toe 游戏。
我几乎做了所有的事情。现在只有一件事要做。
我想让它可以与某人在线玩。
我想通过互联网在两个游戏之间发送数据。
不幸的是我的服务器不支持 Node.JS。
有没有一种方法可以在没有任何服务器端“套接字”的情况下实现这一点。
我想我可以用它来XMLHttpRequest()保存/加载数据到服务器文件中并像这样玩,但我认为这需要大量代码,也许对于 ttt 来说它会足够快,但对于更复杂的游戏它不会足够了。
我知道这很难,但是在 Node.js 之前他们是怎么做到的呢?
问题
使用 eventlet 0.25.0 和 python-socketio 4.0.3 w/ Python 3.7,我试图让两个 Python 脚本与 websocket 进行通信。服务器脚本运行良好:
import socketio # type: ignore
import eventlet
import json
import util as u # type: ignore
eventlet.monkey_patch()
WSGI_LOG_FORMAT = '%(client_ip)s "%(request_line)s" %(status_code)s %(body_length)s %(wall_seconds).6f'
class DatabaseServer:
""" Initializes a server using socketio and eventlet. Use start() and stop() to... start and stop it.
push() pushes new data to all clients
"""
def __init__(self):
self.server = socketio.Server(async_mode='eventlet', namespace='/socket.io')
self.server.on('connect', self.connect, namespace='/socket.io')
self.server.on('disconnect', self.disconnect, namespace='/socket.io')
self.server.on('client_response', self.client_response, namespace='/socket.io') …Run Code Online (Sandbox Code Playgroud) 我试图澄清/理解websocketsover是否HTTP/2也会使用流通过 TCP 连接进行多路复用。RFC8441 的第 5 节似乎暗示了这一点
成功处理打开握手后,对等方应使用 CONNECT 事务中的 HTTP/2 流继续执行 WebSocket 协议 [RFC6455],就像 [RFC6455] 中提到的 TCP 连接一样。此时 WebSocket 连接的状态为 OPEN,如 [RFC6455] 第 4.1 节所定义。
HTTP/2 流关闭也类似于 [RFC6455] 的 TCP 连接关闭。有序的 TCP 级闭包表示为 END_STREAM 标志([RFC7540],第 6.1 节)。RST 异常由 RST_STREAM 帧([RFC7540],第 6.4 节)和 CANCEL 错误代码([RFC7540],第 7 节)表示。
但我的困惑来自于这样一个事实:即使使用 HTTP/1.1,虽然浏览器中的选项卡共享与同一主机的底层 TCP 连接(例如 chrome 建立 6 个 TCP 连接),但在不同选项websocket卡中创建到同一主机的连接会导致不同的 TCP每个选项卡中的连接。
我不确定为什么两者之间存在差异以及是否也可能websockets相同HTTP/2。
有哪位高手可以解释一下。谢谢。
我偶然发现了这篇文章。它谈到
强制每个用户使用单个 Web 套接字连接
它指出,它的一些优点是它使服务器端逻辑不那么复杂。我的问题是
- - - - - -编辑 - - - - - - -
具有单个通道的简单用户 Websocket。我几乎从凤凰指南的“如何”部分复制了这个代码字。
第一个请求是我的 - 它包含来自 facebook 登录响应的用户身份验证令牌。正如您所看到的,它来自phoenix.js文件并且工作得很好...我能够发送和接收消息 - 没问题。
第二个似乎完全来自其他地方,我不知道为什么!?
frame.js这不是我的文件,所以一定是某种node_module依赖性的一部分,js被压缩成一行并且不完全清晰。
我每隔 5 秒左右就会在日志中收到此信息:
phoenix_1 | [info] CONNECT GametimeWeb.UserSocket
phoenix_1 | Transport: :websocket
phoenix_1 | Connect Info: %{}
phoenix_1 | Parameters: %{"token" => "", "vsn" => "2.0.0"}
phoenix_1 | :invalid - this is the response the socket returns I have jsut inspected it and printed to logs.
phoenix_1 | [debug] invalid
phoenix_1 | [info] Replied GametimeWeb.UserSocket :error
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
凤凰1.4.10
用户套接字:
defmodule GametimeWeb.UserSocket do
use Phoenix.Socket
require Logger …Run Code Online (Sandbox Code Playgroud) 在客户端,我使用了 socket.on() 并获得了多个侦听器。我在一个答案中发现将其更改为 socket.once(),效果很好。但我找不到原因。有人能告诉我其中的区别吗?哪一个更好?谢谢。
这是我的客户端代码库。它正在与交换 websocket 之一一起使用,但不与此 websocket 一起使用。有什么建议么?
websocket参考:https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md
import React, { Component, createContext } from "react";
export const Contx = createContext();
export class ConProvider extends Component {
state = {
coins: [],
digCoin: [],
sou: [],
passSocket: undefined
};
componentDidMount() {
this.socketCall();
}
socketCall = () => {
var ws = new WebSocket("wss://stream.binance.com:9443");
var msg = {
"method": "SUBSCRIBE",
"params": "btcusdt@depth",
"id": 1
};
ws.onopen = () => {
ws.send(msg);
};
ws.onmessage = e => {
const value = e.data;
this.setState({ …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 React Native 应用程序中使用 websocket 连接来接收二进制数据,我的 websocket 代码如下所示:
var websocket = new WebSocket("ws://10.10.10.1/stream")
websocket.onmessage = (event) => {
console.log(event);
console.log(event.data);
var reader = new FileReader();
reader.readAsText(event.data, "UTF-8");
reader.onload = function() {
...
}
};
Run Code Online (Sandbox Code Playgroud)
记录的事件对象如下所示:
{data: [], istrusted: false}
Run Code Online (Sandbox Code Playgroud)
event.data 记录为未定义
我可以正常连接并发送消息,但无法接收消息。我有相同的 websocket 连接在 web 应用程序中工作正常,所以我知道 websocket 服务器正在发送正确的数据,但由于某种原因,我在使用 React Native 时无法获取传入的消息数据。
React Native 处理这个问题的方式有什么具体的吗?
websocket ×10
javascript ×4
socket.io ×3
node.js ×2
apache-kafka ×1
binance ×1
cowboy ×1
elixir ×1
express ×1
http2 ×1
java ×1
python ×1
react-native ×1
reactjs ×1
session ×1
spring-kafka ×1
ssl ×1
stomp ×1
webrtc ×1
ws ×1