我正在开发一个上传跟踪器(进度条等)。
因此,对于我的前端,我使用 jQuery 文件上传。 后端上传是使用单独的工作人员完成的,我使用 Redis pub/sub。 因此,为了连接前端和后端,我使用 Node.JS (socket.io)。
jQuery 文件上传有一个“done
”回调函数,表示我们的文件已到达服务器。
这对于单个文件来说绝对没问题。
当我尝试同时上传 2 个以上文件时出现问题。 “done”回调函数附加到套接字监听器 2 次以上(如果我错了,请纠正我),作为输出,我得到如下内容:
579 " - progress: " 8.333333333333334
580 " - progress: " 8.333333333333334
579 " - progress: " 16.666666666666668
580 " - progress: " 16.666666666666668
579 " - progress: " 25
580 " - progress: " 25
....
579 " -> upload is finished!"
580 " -> upload is finished!"
这是上传 2 个文件的示例。这根本没有任何意义,因为它们只能被一个接一个地处理。
所以它应该看起来像这样:
579 " - progress: " 8.333333333333334
579 " - progress: " 16.666666666666668
579 " - progress: " 25
....
579 " -> upload is finished!"
580 " - progress: " 8.333333333333334
580 " - progress: " 16.666666666666668
....
580 " -> upload is finished!"
Node.js 服务器端工作得很好。 这是其中的日志:
RECEIVED progress FROM upload-579
RECEIVED progress FROM upload-579
RECEIVED progress FROM upload-579
RECEIVED progress FROM upload-579
RECEIVED progress FROM upload-579
RECEIVED progress FROM upload-579
RECEIVED progress FROM upload-579
RECEIVED progress FROM upload-579
RECEIVED progress FROM upload-579
RECEIVED progress FROM upload-579
RECEIVED progress FROM upload-579
RECEIVED done FROM upload-579
RECEIVED progress FROM upload-580
RECEIVED progress FROM upload-580
RECEIVED progress FROM upload-580
RECEIVED progress FROM upload-580
RECEIVED progress FROM upload-580
RECEIVED progress FROM upload-580
RECEIVED progress FROM upload-580
RECEIVED progress FROM upload-580
RECEIVED progress FROM upload-580
RECEIVED progress FROM upload-580
RECEIVED progress FROM upload-580
RECEIVED done FROM upload-580
它从 Redis channel 接收消息并向客户端发出适当的消息。 我认为问题出在客户端的某个地方,但我不知道如何修改那里的代码以获得我想要的。 可以采取什么措施将它们彼此分开吗?
附注
最佳答案
客户端的套接字事件回调将针对来自 Node.js 的任何发出消息而触发。这就是您看到重复日志消息的原因。在套接字消息中发送附加数据,或附加唯一事件。
关于javascript - Node.JS 单套接字,多个事件(上传),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25928036/