我被要求在工作中使用 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/