import SockJS from "sockjs-client"
let stompClient = null
class Socket {
constructor(socketMsg) {
this.socketMsg = socketMsg
}
/**
* 向服务器发起websocket连接并发送CONNECT帧
* @param {object} stompType 与服务器连接通道类型
* @param {function} callback 回调方法
*/
static startConnect( callback) {
// 建立连接对象
const socket = new SockJS(''连接地址)
// 获取 STOMP 子协议的客户端对象
stompClient = Stomp.over(socket)
// 请求头验证,需要登陆
const headers = {
userId: JSON.parse(sessionStorage.getItem("id"))
}
// stompClient.debug = () =>{}
stompClient.connect(
headers,
(result) =>{
console.log("开始连接",result)
// 订阅队列推送
stompClient.subscribe('订阅1队列地址', res =>{
// 收到推送内容
callback(data)
})
// 订阅被邀请
stompClient.subscribe('订阅2地址', res =>{
callback(data)
})
},
() =>{
// console.log(err)
}
)
}
// 主动发送消息
static send(data) {
stompClient.send(data.url, headers, data.sendMsg)
}
// 断开连接
static disconnect() {
stompClient.disconnect(() =>{
// console.log("连接关闭")
})
}
}
export default Socket
目前只有支持HTML5的浏览器加入了Javascript对Socket的支持, 而且目前处于测试阶段, 还不推荐使用. 如果你必须要用Javascript实现socket传输, 相关代码如下:<!-- 初始化 -->
function connect(){
try{
var socket
var host = "ws://localhost:8000/socket/server/startDaemon.php"
var socket = new WebSocket(host)
message('<p class="event">Socket Status: '+socket.readyState)
socket.onopen = function(){
message('<p class="event">Socket Status: '+socket.readyState+' (open)')
}
socket.onmessage = function(msg){
message('<p class="message">Received: '+msg.data)
}
socket.onclose = function(){
message('<p class="event">Socket Status: '+socket.readyState+' (Closed)')
}
} catch(exception){
message('<p>Error'+exception)
}
}
<!-- 发送数据 -->
function send() {
socket.send(text)
}
<!-- 断开Socket -->
socket.close()