您如何将 websocket 设置为外部 API?
Posted
技术标签:
【中文标题】您如何将 websocket 设置为外部 API?【英文标题】:How do you set up a websocket to an external API? 【发布时间】:2020-01-02 16:22:45 【问题描述】:我设置了一条从openweathermap API获取城市天气的路线
index.js 文件
var express = require("express"),
router = express.Router();
var weather = require("openweather-apis");
router.get("/weather", function(req, res)
weather.setCity('Miami');
weather.setAPPID(appID);
weather.getAllWeather(function(err, allWeather)
res.json(allWeather: allWeather);
);
);
我想为此路由设置一个 websocket,这样每次发生变化时,我都会得到一个可以显示给用户的更新。我试过这个:
index.ejs 文件
<script src="https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js"></script>
<script>
var socket = io('http://localhost:3000/weather');
socket.on('connect', function());
socket.on('event', function(data)
// do something
);
socket.on('disconnect', function());
</script>
但我不断收到错误。如果有人可以让我知道我做错了什么,请帮忙!
我收到以下错误:
index.js:83 GET http://localhost:3000/socket.io/?EIO=3&transport=polling&t=Mzd4Dpj 404 (Not Found)
【问题讨论】:
请发布错误详情。 更新了错误答案! websockets 提供路由?我认为显示的第一个代码是一个 express.js,它提供了一个 Web 服务器,第二个是 Socket.io,它依赖于一个 WebSOCKETServer。这不会一起工作 @Mandalina - 你启动了服务器吗?我:enode server.js (or your backend file)
?
@random ya 我已经开始了,这就是我得到的错误
【参考方案1】:
你本身不能。客户端连接到 websocket。 websocket 不连接任何东西,它是客户端连接的。 (websocket 客户端无法连接到常规 HTTP 端点)。
如果您想在对传统 HTTP Web 服务的响应发生变化时通过 Websocket 广播数据,那么您需要轮询 Web 服务的 URL(例如使用 setInterval
),然后在您使用 Websocket 时通过 Websocket 发送数据在响应中获取新数据。
http://localhost:3000/socket.io/?EIO=3&transport=polling&t=Mzd4Dpj
给你一个404
错误,因为你没有在服务器上提供一个 websocket 供客户端连接。 getting started documentation 将引导您设置 Socket.io 的服务器端。在没有服务器连接的情况下,您不能使用客户端的一半。
【讨论】:
嘿,非常感谢您的回复!如何通过 websocket 设置轮询? @Mandalina — 担心首先设置 websocket 的服务器端部分。我指出的文档有一个关于广播的部分。使用它通过套接字发送数据。 非常感谢!我现在就设置它以上是关于您如何将 websocket 设置为外部 API?的主要内容,如果未能解决你的问题,请参考以下文章