php - 是否可以通过 websocket 调用 http API?

标签 php websocket ratchet phpwebsocket

我被要求在工作中使用 websocket 和 php Ratchet 进行 api 调用。由于我对 websocket 完全不熟悉,所以我用谷歌搜索并观看了 youtube 视频来解决这个问题,但是我搜索的越多,我就越觉得用 websocket 调用 api 是不可能的。
我是不是遗漏了什么,或者真的不可能通过 websocket 调用 api?
如果可能的话,你能告诉我一个例子怎么做吗
我知道我可能听起来很尴尬,因为我对 websockets 没有深入的了解,英语甚至不是我的第一语言,但我真的很绝望,请帮助我

最佳答案

REST API 与 WebSocket API 有着根本的不同。
REST API
调用是通过 HTTP(S) 进行的。您可以使用 AJAX(参见此处:https://en.wikipedia.org/wiki/Ajax_(programming))直接从浏览器访问 HTTP 端点。在 JavaScript 中,您将使用 Fetch-API(参见此处:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)进行调用。根据定义,每个调用都是无状态的。每个请求都必须发送 Cookie 和特殊 header 以创建上下文(例如登录的用户)。
示例(客户端):

fetch('http://example.com/my-rest-api/endpoint1')
  .then(response => response.json())
  .then(data => console.log(data));
示例(服务器):
app.get('/my-rest-api/endpoint1', handlerFunc);
网络套接字接口(interface)
必须在客户端和服务器之间建立有状态连接。客户端和服务器可以通过连接交换消息。不像 REST-API 消息可以双向发送。
WebSocket API 的高级实现是 Socket.io。
可以通过定义带有有效载荷的消息类型来设计 API。
我也不建议将 PHP 用于 WS-API(即使有像 Ratchet 这样的解决方案)。使用为这样的基于事件的用例开发的语言/运行时(例如 nodeJS)。
示例(客户端):
const socket = SocketClass('example.com/my-websocket-api');

// variant 1 with callbacks
const response = socket.sendMessage('endpoint1', myData);

// variant 2 with message listener
socket.on('endpoint1Response', handlerFunc);
socket.sendMessage('endpoint1', myData);
示例(服务器):
const serverSocket = SocketClass('/my-websocket-api');
serverSocket.on('connection', function (socket) {

    // variant 1 with callbacks
    socket.on('endpoint1', (data, callback) => {
        callback(null, responseData);
    });

    // variant 2 with message listener
    socket.on('endpoint1', (data, cb) => {
        socket.emit('endpoint1Answer', responseData);
    });
});

关于php - 是否可以通过 websocket 调用 http API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68972613/

相关文章:

scala - Scala中Websocket连接的超时

ssl - 带隧道的扭曲 Ratchet

javascript - 使用 js 或 css 或两者使 slider 自动滚动图像

php - PHP WebSocket 服务器和 NGINX 反向代理的文件限制

php - sortKeys() 不对集合的键进行排序

php - ChromeOptions 不起作用 - PHP WebDriver

php - fatal error : Call to undefined function mcrypt_encrypt()

PHP:MySQL 选择查询与字符串操作

javascript - 刷新浏览器时 Node.js 服务器崩溃

javascript - Node 中有没有一个好的库用于客户端和服务器之间的异步通信?