如何使用WebSocket

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用WebSocket相关的知识,希望对你有一定的参考价值。

参考技术A 1.先装websocket服务器客户端
【java】kaazing websocket getway
【python】mod_pywebsocket
javascript】node.js
2. WebSocket JavaScript 接口定义

[Constructor(in DOMString url, in optional DOMString protocol)]

interface WebSocket

readonly attribute DOMString URL;

// ready state

const unsigned short CONNECTING = 0;

const unsigned short OPEN = 1;

const unsigned short CLOSED = 2;

readonly attribute unsigned short readyState;

readonly attribute unsigned long bufferedAmount;

//networking

attribute Function onopen;

attribute Function onmessage;

attribute Function onclose;

boolean send(in DOMString data);

void close();

;

WebSocket implements EventTarget;

其中 URL 属性代表 WebSocket 服务器的网络地址,协议通常是”ws”,send 方法就是发送数据到服务器端,close 方法就是关闭连接。除了这些方法,还有一些很重要的事件:onopen,onmessage,onerror 以及 onclose。下面是一段简单的 JavaScript 代码展示了怎样建立 WebSocket 连接和获取数据:

3. 建立 WebSocket 连接的实例 JavaScript 代码

var wsServer = 'ws://localhost:8888/Demo';

var websocket = new WebSocket(wsServer);

websocket.onopen = function (evt) onOpen(evt) ;

websocket.onclose = function (evt) onClose(evt) ;

websocket.onmessage = function (evt) onMessage(evt) ;

websocket.onerror = function (evt) onError(evt) ;

function onOpen(evt)

console.log("Connected to WebSocket server.");



function onClose(evt)

console.log("Disconnected");



function onMessage(evt)

console.log('Retrieved data from server: ' + evt.data);



function onError(evt)

console.log('Error occured: ' + evt.data);

本回答被提问者和网友采纳

如何使用 cpprestsdk 设置 websocket SSL 连接?

【中文标题】如何使用 cpprestsdk 设置 websocket SSL 连接?【英文标题】:How to setup websocket SSL connect using cpprestsdk? 【发布时间】:2019-07-04 09:37:06 【问题描述】:

我尝试使用 SSL 连接到 websocket 服务器。但总是在连接上失败(...)。 我是 cpprestsdk 的新手,我找不到有关如何将 SSL 信息设置为 websocket_client 的文档。

websocket_client_config config;
config.set_server_name("wss://host:port/v3/api");
websocket_client client(config);

auto fileStream = std::make_sharedconcurrency::streams::ostream();
pplx::task requestTask = fstream::open_ostream(U("results2.html"))
.then([&](ostream outFile)

*fileStream = outFile;
// Create http_client to send the request.
uri wsuri(U("wss://host:port/v3/api"));
client.connect(wsuri).wait();

     websocket_outgoing_message msg;
     msg.set_utf8_message(obj.serialize());
     client.send(msg).wait();
     printf("send success: %s\n", obj.serialize().c_str());
     return client.receive().get();
)

它抛出“错误异常:set_fail_handler: 8: TLS 握手失败”。

【问题讨论】:

【参考方案1】:

可在此处找到 cpprestsdk 的文档 C++ REST SDK WebSocket client。尽管这并未显示与 cpprestsdk 相关的所有必要信息,但它会对您有所帮助。

您还可以获得 SSL 测试示例here。我展示了一个使用 SSL 或 wss:// 方案实现的简单 websocket 客户端

 websocket_client client;
        std::string body_str("hello");

        try
        
            client.connect(U("wss://echo.websocket.org/")).wait();
            auto receive_task = client.receive().then([body_str](websocket_incoming_message ret_msg) 
                VERIFY_ARE_EQUAL(ret_msg.length(), body_str.length());
                auto ret_str = ret_msg.extract_string().get();

                VERIFY_ARE_EQUAL(body_str.compare(ret_str), 0);
                VERIFY_ARE_EQUAL(ret_msg.message_type(), websocket_message_type::text_message);
            );

            websocket_outgoing_message msg;
            msg.set_utf8_message(body_str);
            client.send(msg).wait();

            receive_task.wait();
            client.close().wait();
        
        catch (const websocket_exception& e)
        
            if (is_timeout(e.what()))
            
                // Since this test depends on an outside server sometimes it sporadically can fail due to timeouts
                // especially on our build machines.
                return;
            
            throw;
        

在这里可以找到更多示例来指导您成功获取它 https://github.com/microsoft/cpprestsdk/wiki/Web-Socket

【讨论】:

请注意,websocket.org 服务已停止,因此在尝试连接时复制和粘贴示例代码会引发错误。

以上是关于如何使用WebSocket的主要内容,如果未能解决你的问题,请参考以下文章

WebSocket原理及如何使用

如何在 XAMPP 服务器中使用 WebSocket

Golang如何使用websocket

如何使用 boost beast websocket 客户端收听 websocket 提要?

如何使用 cpprestsdk 设置 websocket SSL 连接?

如何使用 faye-websocket-ruby 向 websocket 客户端发送拒绝连接