您如何将 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 - 你启动了服务器吗?我:e node 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&amp;transport=polling&amp;t=Mzd4Dpj 给你一个404 错误,因为你没有在服务器上提供一个 websocket 供客户端连接。 getting started documentation 将引导您设置 Socket.io 的服务器端。在没有服务器连接的情况下,您不能使用客户端的一半。

【讨论】:

嘿,非常感谢您的回复!如何通过 websocket 设置轮询? @Mandalina — 担心首先设置 websocket 的服务器端部分。我指出的文档有一个关于广播的部分。使用它通过套接字发送数据。 非常感谢!我现在就设置它

以上是关于您如何将 websocket 设置为外部 API?的主要内容,如果未能解决你的问题,请参考以下文章