socket.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { onBeforeUnmount } from 'vue';
  2. function useMultipleWebSockets(urls: any) {
  3. const sockets: { [key: string]: WebSocket } = {};
  4. const status: { [key: string]: string } = {};
  5. const sendData: { [key: string]: string } = {};
  6. // 初始化所有连接
  7. urls.forEach((url: string) => {
  8. sockets[url] = new WebSocket(url);
  9. sockets[url].onopen = () => {
  10. console.log(`WebSocket connected to ${url}`);
  11. status[url] = "connected";
  12. };
  13. sockets[url].onmessage = (event) => {
  14. // console.log(`Message from ${url}:`, event.data);
  15. sendData[url] = event.data;
  16. // 处理不同来源的消息
  17. };
  18. sockets[url].onerror = (error) => {
  19. console.error(`WebSocket error on ${url}:`, error);
  20. };
  21. sockets[url].onclose = () => {
  22. console.log(`WebSocket disconnected from ${url}`);
  23. status[url] = "disconnected";
  24. };
  25. });
  26. // 组件卸载时关闭所有连接
  27. onBeforeUnmount(() => {
  28. Object.values(sockets).forEach(socket => {
  29. if (socket.readyState === WebSocket.OPEN) {
  30. socket.close();
  31. }
  32. });
  33. });
  34. // 发送消息到指定连接
  35. const send = (url: any, message: any) => {
  36. if (sockets[url] && sockets[url].readyState === WebSocket.OPEN) {
  37. sockets[url].send(JSON.stringify(message));
  38. }
  39. };
  40. return { sockets, send,sendData,status };
  41. }
  42. export default useMultipleWebSockets;