GVKun编程网logo

node.js express socket.io 路由器(nodejs路由配置)

2

在本文中,我们将带你了解node.jsexpresssocket.io路由器在这篇文章中,我们将为您详细介绍node.jsexpresssocket.io路由器的方方面面,并解答nodejs路由配置常

在本文中,我们将带你了解node.js express socket.io 路由器在这篇文章中,我们将为您详细介绍node.js express socket.io 路由器的方方面面,并解答nodejs路由配置常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的Android Socket.IO 实现无法连接到运行 Socket.IO 的 Express 服务器 - Wireshark 显示 HTTP 400/错误请求?、Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit不会触发、Express 路由器 app.all('*', (req, res, next)) 不会在 ec2 实例上执行 HTTP 请求获取请求超时错误、Express 路由器 GET 端点给出了 Not Found 错误

本文目录一览:

node.js express socket.io 路由器(nodejs路由配置)

node.js express socket.io 路由器(nodejs路由配置)

如何解决node.js express socket.io 路由器

我正在使用带有 socket.io 的 express。我想使用 socket.io 不同的路线。所以它有效。但是有一些问题是连接太多。如果我重新加载网站,我可能会得到重新加载的结果。所以我收到警告(节点:7175)MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。 11 个断开监听器添加到 [Socket]。使用emitter.setMaxListeners()增加limit.and这是代码enter image description here

Android Socket.IO 实现无法连接到运行 Socket.IO 的 Express 服务器 - Wireshark 显示 HTTP 400/错误请求?

Android Socket.IO 实现无法连接到运行 Socket.IO 的 Express 服务器 - Wireshark 显示 HTTP 400/错误请求?

如何解决Android Socket.IO 实现无法连接到运行 Socket.IO 的 Express 服务器 - Wireshark 显示 HTTP 400/错误请求?

我正在尝试将使用 Native Socket.IO 的 Android 应用程序连接到 Express 服务器。服务器有一个非常简单的工作(目前)在 4200 上接收传入流量并将其发送回其他客户端,以便他们可以显示它 - 尽管现在我只是在调试服务器和这个 Android 实现,希望有漂亮的文字“客户端已连接”

这是服务器 API

  1. // Socket handling
  2. io.on( ''connection'',(socket) => {
  3. console.log(''Client Connected'');
  4. socket.on(''temperature'',(data) => {
  5. console.log(''Engine Data:'' + data);
  6. // For Now,just spit data back to all other connected clients
  7. socket.broadcast.emit(''temperature'',{num: data});
  8. });
  9. socket.on(''disconnect'',()=> {
  10. console.log(''Client disconnected'');
  11. });
  12. });

目前这适用于发送随机数的基本 Node.JS 客户端,所以我知道服务器可以工作:

  1. <script>
  2. var socket = io(''http://localhost:4200'');
  3. socket.on(''connection'',(socket) => {
  4. console.log(''Connection Success'');
  5. });
  6. let temperature = 0;
  7. //Send stuff every 100ms
  8. setInterval(() => {
  9. let lastTemp = temperature < 90 ? temperature : 0;
  10. temperature = Math.floor(Math.random() * 5) + lastTemp;
  11. socket.emit(''temperature'',temperature);
  12. },50);
  13. </script>

但是我的 Android 应用程序有问题 - 服务器不像浏览器客户端那样记录连接,虽然它没有在连接上抛出异常,但套接字 ID 只是 NULL 并且状态是“不调试时连接”。我一直在关注不同的 tutorials 并尝试发布在 StackOverflow 上的解决方案,所以我目前有一个主要活动,它使用一个查找栏来查找如下所示的虚拟值:

  1. //! SocketIO stuff
  2. import com.github.nkzawa.socketio.client.IO
  3. import com.github.nkzawa.socketio.client.socket
  4. class MainActivity : AppCompatActivity() {
  5. //! Instantiate socket for other functions that will utilize it - this will likely be part of its own class
  6. lateinit var mSocket: Socket
  7. //! Main Activity creation
  8. override fun onCreate(savedInstanceState: Bundle?) {
  9. super.onCreate(savedInstanceState)
  10. setContentView(R.layout.activity_main)
  11. setSupportActionBar(findViewById(R.id.toolbar))
  12. //! SeekBar for setting dummy input by user
  13. val seek: SeekBar = findViewById<SeekBar>(R.id.seekBar)
  14. seek.max = 100
  15. seek.progress = 50
  16. //! CurrentVal is our current dummy sensor value
  17. var currentVal: Int;
  18. //! Connect to web server
  19. try {
  20. //! Configure library options
  21. val options = IO.Options()
  22. options.reconnection = true
  23. options.forceNew = true
  24. //This address is the way you can connect to localhost with AVD(Android Virtual Device)
  25. mSocket = IO.socket("http://10.0.2.2:4200/",options) // emulator loopback address
  26. } catch (e: Exception) {
  27. e.printstacktrace()
  28. Log.d("Failure","Failed to connect to server")
  29. }
  30. Log.d("Connected","socket ID:${mSocket.id()}")
  31. mSocket.connect()
  32. seek.setonSeekBarchangelistener(object : SeekBar.OnSeekBarchangelistener {
  33. ...
  34. override fun onStopTrackingTouch(seek: SeekBar) {
  35. //Progress stopped
  36. //get value from seek bar
  37. currentVal = seek.progress
  38. //Send the value via our socket
  39. mSocket.emit("temperature",currentVal)
  40. }
  41. })
  42. }

根据其他 StackOverflow 建议的反馈,我的清单包含以下内容

  1. <uses-permission android:name="android.permission.INTERNET" />
  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  3. <application
  4. ...
  5. android:usesCleartextTraffic="true"
  6. ...

但是服务器并没有反映客户端已连接。当我查看 Wireshark 时,我看到确实有一个端口 55735 正在尝试连接到运行在 4200 上的服务器,但是服务器正在响应“400 Bad Request”并且 JSON 字符串值为“不支持的协议版本”>

  1. 2899 23.395504 127.0.0.1 127.0.0.1 HTTP/JSON 287 HTTP/1.1 400 Bad Request,JavaScript Object Notation (application/json)

这让我相信我使用的 Socket.IO 库和服务器上的 Socket.IO 存在一些兼容性问题。我正在使用的教程在 Socket.IO 网站上...但也是 2015 年的。我应该遵循不同的方式在 Android 上使用 Socket.IO 吗?

解决方法

我似乎找到了问题所在——Android 的 socket.io 库与 NPM 中最新的 3.1.1 不兼容

这主要是通过观察 Wireshark 中的数据来显示的 - 我在端口之间进行了通信,但是响应 - 主要是响应中的 JSON - 表明协议版本不正确

简而言之,我的 build.gradle 文件中对应用程序的依赖(在 2015 年 Socket.IO 的原始教程中显示)已经过时了

  1. implementation ''com.github.nkzawa:socket.io-client:0.6.0''
  2. //OUT OF DATE

Joyce Hong 的这个实现更接近......

  1. implementation (''io.socket:socket.io-client:1.0.0'') {
  2. exclude group: ''org.json'',module: ''json''
  3. }
  4. //Still nope,but that was a clue

但是,与我在 NPM 中的 3.1.1 Socket.IO 库兼容的实现是

  1. implementation (''io.socket:socket.io-client:2.0.0'') {
  2. exclude group: ''org.json'',module: ''json''
  3. }
  4. //YES

如果其他人遇到此问题,即端口之间存在流量,但都没有注册连接,请检查您的版本

Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit不会触发

Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit不会触发

我一直在这个问题上花费数小时,但无济于事。

编辑:find解决scheme(请参阅我的答案)

项目背景

我正在Symfony2构build一个项目,这个项目需要一个上传大文件的模块。 我select了Node.js和Socket.IO (我必须从头学习,所以我可能会缺less一些基本的东西)。 我将它们与HTML5 File和FileReader API结合起来,将切片中的文件从客户端发送到服务器。 初步testing表明,这种方法作为一个独立的应用程序运行良好,一切都由Node.js处理和服务,但与Apache和Symfony2集成似乎有问题。

该应用程序有一个不安全和安全的部分。 我的目标是在端口80和443上使用Apache来为Symfony2构build的应用程序提供大量服务,在端口8080上使用带有Socket.io Node.js来上传文件。 连接到套接字的客户端页面将由Apache ,但套接字将通过Node.js运行。 上传模块必须通过HTTPS运行,因为页面驻留在具有经过身份validation的用户的安全环境中。

问题是事件使用socket.emit或socket.send似乎没有工作。 客户端到服务器,或服务器到客户端,它没有任何区别。 没有任何反应 ,也没有错误。

使用Apache POI的sxssfSheet从xlsx读取数据

该网站负载很重+ ROR

JSON对象的最大大小?

PHP如何与Apache接口?

Apache的子域名代理jenkins在tomcat插入额外的目录

代码

显示的代码是我的代码的简化版本,没有混乱和敏感的数据。

服务器

var httpsModule = require('https'),fs = require('fs'),io = require('socket.io'); var httpsOptions = { key: fs.readFileSync('path/to/key'),cert: fs.readFileSync('/path/to/cert'),passphrase: "1234lol" } var httpsServer = httpsModule.createServer(httpsOptions); var ioServer = io.listen(httpsServer); httpsServer.listen(8080); ioServer.sockets.on('connection',function(socket) { // This event gets bound,but never fires socket.on('NewFile',function(data) { // To make sure something is happening console.log(data); // Process the new file... }); // Oddly,this one does fire socket.on('disconnect',function() { console.log("disconnected"); }); });

客户

// This is a Twig template,so I'll give an excerpt {% block javascripts %} {{ parent() }} <script type="text/javascript" src="https://my.server:8080/socket.io/socket.io.js"></script> <script type="text/javascript"> var socket = io.connect("my.server:8080",{ secure: true,port: 8080 }); // Imagine this is the function initiating the file upload // File is an object containing Metadata about the file like,filename,size,etc. function uploadNewFile(file) { socket.emit("NewFile",item); } </script> {% endblock %}

所以问题是…

当然,还有更多的应用程序比这个,但这是我卡住的地方。 页面加载完美没有错误,但排放事件永远不会触发或到达服务器(断开事件除外)。 我已经尝试了客户端和服务器上的消息事件,以检查是否只有自定义事件的问题,但也没有工作。 我猜测什么是阻止客户端 – 服务器通信(这不是防火墙,我已经检查)。

我完全不知所措,请帮忙。

编辑:find解决scheme(请参阅我的答案)

通过一个脚本在apache下所有的path服务

Apache SetEnv预装了REDIRECT_。 是什么赋予了?

Linux未find包含非ASCII字符的文件名的错误

PHP直接打印到打印机(本地/networking)(卡在打印后台处理程序中)

NodeJS应该是独立的(没有Apache Nginx的IE)

经过一番苦心的调试,我发现我的设置有问题。 不妨分享我的发现,虽然他们(我认为)与Node.js,Socket.IO或Apache无关。

正如我所提到的,我的问题已经简化了代码,向您展示我的设置没有混乱。 不过,我通过一个对象来设置客户端,使用属性来配置套接字连接。 像这样:

var MyProject = {}; MyProject.Uploader = { location: 'my.server:8080',socket: io.connect(location,port: 8080,query: "token=blabla" }),// ...lots of extra properties and methods }

问题在于使用location作为属性名称。 这是Javascript中的一个保留字,在这种情况下会造成一些奇怪的行为。 我发现奇怪的是,一个对象的属性名称不能是保留字,所以我决定测试。 我也注意到我正在引用属性不正确,我忘记连接到套接字时使用this.location 。 所以我把它改成了这个,只是作为一个测试。

var MyProject = {}; MyProject.Uploader = { location: 'my.server:8080',socket: io.connect(this.location,// ...lots of extra properties and methods }

但无济于事。 我仍然没有通过套接字获取数据。 所以下一步似乎是合乎逻辑的,这是我受挫的调试风暴。 改变属性名称固定一切!

var MyProject = {}; MyProject.Uploader = { socketLocation: 'my.server:8080',socket: io.connect(this.socketLocation,// ...lots of extra properties and methods }

这种方法完美运行,我得到了大量的调试消息。 成功!! 不管是Javascript中的预期行为,还是重写(或者这里发生的任何事情,“滥用”,现在都觉得是一种更好的方式)对象属性,如果你碰巧使用了保留字,我不知道。 我只知道我从现在开始避开他们!

希望它能帮助那里的任何人!

Express 路由器 app.all('*', (req, res, next)) 不会在 ec2 实例上执行 HTTP 请求获取请求超时错误

Express 路由器 app.all('*', (req, res, next)) 不会在 ec2 实例上执行 HTTP 请求获取请求超时错误

如何解决Express 路由器 app.all(''*'', (req, res, next)) 不会在 ec2 实例上执行 HTTP 请求获取请求超时错误?

我正在运行一个 MEAN 堆栈应用程序。它在我的本地主机上运行良好。但是,当 MEAN 堆栈部署在 AWS ubuntu 服务器上时,HTTP 请求不会转发到后端。

app.js 文件如下所示:

var app = express();

app.all(''*'',(req,res,next) => {
  if (req.secure) {
    
    return next();
  }
  else {
      
    res.redirect(307,''https://'' + req.hostname + '':'' + app.get(''secPort'') + req.url);

  }
});

在我的本地主机上,每个 HTTP 请求都进入 if(req.secure) 循环,并且在 app.js 中定义的相应路由器被调用。

但是,当我在 EC2 上部署我的 MEAN 堆栈应用程序时,控件根本不会进入 if 条件。

我使用Nginx反向代理转发后端请求如下:

server {
  charset utf-8;
  listen 80 default_server;
  server_name _;

  location / {
    root /opt/front-end;
    try_files $uri /index.html;
  }

  location /* {
    proxy_pass http://localhost:/3000;
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Express 路由器 GET 端点给出了 Not Found 错误

Express 路由器 GET 端点给出了 Not Found 错误

如何解决Express 路由器 GET 端点给出了 Not Found 错误

这是我的 app.js

app.use(''/v1/abc/'',router);

然后是二级

router.use(''/:primary_id/def'',defServices);

最终服务水平

     class defServices {
      constructor() {
        const router = new express.Router({ mergeParams: true });
        router.get(''/'',this.func1);
        router.get(''/:pid'',this.func2);
        router.put(''/'',this.func3);
  
        return router;
      }
    
      async func1(req,res) {
     //code goes here 
     }
  }

export default new defServices();

我的要求

GET  http://localhost:3000/dev/v1/abc/48/def

我遇到第一个 GET 端点无法到达并获得 404 响应的问题,但第二个 GET 端点和第三个 PUT 端点工作正常。此外,这是在无服务器离线中实现的

今天的关于node.js express socket.io 路由器nodejs路由配置的分享已经结束,谢谢您的关注,如果想了解更多关于Android Socket.IO 实现无法连接到运行 Socket.IO 的 Express 服务器 - Wireshark 显示 HTTP 400/错误请求?、Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit不会触发、Express 路由器 app.all('*', (req, res, next)) 不会在 ec2 实例上执行 HTTP 请求获取请求超时错误、Express 路由器 GET 端点给出了 Not Found 错误的相关知识,请在本站进行查询。

本文标签: