标签: websocket

Websocket 服务器的自签名证书的“通用名称无效”

我正在尝试运行此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 的地址,我不知道该写哪一部分?

ssl ssl-certificate websocket webrtc ws

1
推荐指数
1
解决办法
4486
查看次数

使用 Kafka 实现 STOMP 协议

我正在使用 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。

任何帮助,将不胜感激。

java stomp websocket apache-kafka spring-kafka

1
推荐指数
1
解决办法
6957
查看次数

如何在没有node.js的情况下在js中建立客户端-客户端连接?

我正在尝试用 JS 制作简单的 Tic-Tac-Toe 游戏。

我几乎做了所有的事情。现在只有一件事要做。

我想让它可以与某人在线玩。

我想通过互联网在两个游戏之间发送数据。

不幸的是我的服务器不支持 Node.JS。

有没有一种方法可以在没有任何服务器端“套接字”的情况下实现这一点。

我想我可以用它来XMLHttpRequest()保存/加载数据到服务器文件中并像这样玩,但我认为这需要大量代码,也许对于 ttt 来说它会足够快,但对于更复杂的游戏它不会足够了。

我知道这很难,但是在 Node.js 之前他们是怎么做到的呢?

javascript xmlhttprequest websocket node.js

1
推荐指数
1
解决办法
1820
查看次数

带有 eventlet 的 Python-socketio 使用轮询而不是 websockets

问题

使用 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)

python websocket socket.io python-socketio

1
推荐指数
1
解决办法
3780
查看次数

HTTP2 上的 websocket 也会在流中复用吗?

我试图澄清/理解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

有哪位高手可以解释一下。谢谢。

websocket http2

1
推荐指数
1
解决办法
2473
查看次数

强制每个用户使用单一 Web 套接字连接有什么缺点吗?

我偶然发现了这篇文章。它谈到

强制每个用户使用单个 Web 套接字连接

它指出,它的一些优点是它使服务器端逻辑不那么复杂。我的问题是

  1. 这样做有什么缺点吗?
  2. 使用 websocket 创建实时应用程序时这样做是常见/良好的做法吗?

- - - - - -编辑 - - - - - - -

  1. 经过一些研究后,我了解到您可以与 socket.io 共享快速会话。这让我想到了这个问题:如果 socket.io 和express 共享会话,那么强制每个用户使用单个 Web Socket 连接是否有任何需要/优势?或者允许用户拥有多个套接字连接是否可以,只要它们都链接到其 user._id 或标识它们的其他内容?

session websocket node.js express socket.io

1
推荐指数
1
解决办法
1814
查看次数

与 phoenix 应用程序的随机额外 websocket 连接?

具有单个通道的简单用户 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)

elixir websocket cowboy phoenix-framework phoenix-channels

1
推荐指数
1
解决办法
212
查看次数

socket.on() 和 socket.once() 之间的区别

在客户端,我使用了 socket.on() 并获得了多个侦听器。我在一个答案中发现将其更改为 socket.once(),效果很好。但我找不到原因。有人能告诉我其中的区别吗?哪一个更好?谢谢。

javascript websocket socket.io

1
推荐指数
1
解决办法
2186
查看次数

无法通过binance Websockets获取socket数据

这是我的客户端代码库。它正在与交换 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)

javascript websocket reactjs cryptocurrency binance

1
推荐指数
1
解决办法
5846
查看次数

React Native websocket event.data 接收二进制数据时为空数组

我正在尝试在 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 处理这个问题的方式有什么具体的吗?

javascript websocket react-native

1
推荐指数
1
解决办法
1759
查看次数