我是websocket的新手,我已经分配了一个现有的工作聊天模块,目前只是向其他用户发送消息。我被要求整合功能,用户可以发送"附件"对彼此。仅供参考,I came across this link,但我需要更多清晰度。
我的问题:
更新1:
我尝试在下面的代码中实现:
var input = document.querySelector('input[type=file]');
function readFile(event) {
var ws_msg = {content: event.target.result };
// Here I call the ws.send method
send_chat_message($scope.sender, $scope.receiver , ws_msg );
}
function changeFile() {
var file = input.files[0];
var reader = new FileReader();
reader.addEventListener('load', readFile);
reader.readAsText(file);
}
input.addEventListener('change', changeFile);
选择文件会自动尝试通过ws发送,但由于某种奇怪的原因, WS连接立即关闭。
答案 0 :(得分:1)
我试过下面的示例代码。我已经将https://github.com/websockets/ws用于web-socket服务器。在HTML / jS我修改过的代码如下工作正常。步骤如下。 (希望你安装了节点)。
创建一个server.js文件并添加以下代码。
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
ws.send('something');
});
使用节点server.js运行节点服务器,你的websocket服务器在localhost上运行:8080
在您的浏览器中,js更改代码如下(您正在使用angular,请根据您的要求稍后进行更改)
var input = document.querySelector('input[type=file]');
var socket = new WebSocket('ws://localhost:8080');
socket.addEventListener('open', function (event) {
socket.send('Hello Server!');
});
function readFile(event) {
var ws_msg = {content: event.target.result };
socket.send(ws_msg);
// Here I call the ws.send method
//send_chat_message($scope.sender, $scope.receiver , ws_msg );
}
function changeFile() {
var file = input.files[0];
var reader = new FileReader();
reader.addEventListener('load', readFile);
reader.readAsText(file);
}
input.addEventListener('change', changeFile);
加载您的JS / HTML并将您应该看到的文件上传到节点服务器控制台中的控制台日志。
更新:
您可以更新节点js服务器代码:
const WebSocket = require('ws');
const fs = require('fs');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
let data = new Buffer(message);
fs.writeFile('new.png', data, 'binary', function (err) {
if (err) {
console.log("error")
}
else {
console.log("done")
}
});
});
参考: Create image from ArrayBuffer in Nodejs
ws.send('something');
});
客户端(浏览器端js)代码为:
var input = document.querySelector('input[type=file]');
var socket = new WebSocket('ws://localhost:8080');
socket.addEventListener('open', function (event) {
socket.send('Hello Server!');
});
function readFile(e) {
//var ws_msg = {content: event.target.result };
var rawData = e.target.result;
socket.send(rawData);
// Here I call the ws.send method
//send_chat_message($scope.sender, $scope.receiver , ws_msg );
}
function changeFile() {
var file = input.files[0];
var reader = new FileReader();
reader.addEventListener('load', readFile);
reader.readAsArrayBuffer(file);
}
input.addEventListener('change', changeFile);