angular - 套接字仅第一次发出数据
问题描述
我是角度的新手。我创建了一个从本地主机服务器接收数据的应用程序。但是我的角度组件只从服务器获取数据一次。当我下次打开页面时。它没有获取数据。它只触发一次事件。当我返回页面并返回我的套接字页面时,它没有获得价值。
私人视频.ts
export class PrivateVideoPage {
constructor(private webSocketservice:WebsocketService) {
}
ngOnInit()
{
console.log("hello")
this.webSocketservice.listen('test event').subscribe((data)=>{
console.log("socket data=>",data);
})
}
}
websocket.service.ts
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import * as io from 'socket.io-client';
import {Observable} from 'rxjs/Observable';
import * as Rx from 'rxjs/Rx';
@Injectable()
export class WebsocketService{
private socket;
constructor() {
this.socket = io('http://localhost:5000',{'multiplex': false});
}
listen(eventName:string)
{
return new Observable((subscriber)=>{
this.socket.on(eventName,(data)=> {
subscriber.next(data);
});
});
}
emit(eventName:string,data:any)
{
this.socket.emit(eventName,data);
}
}
main.js(服务器)
let app = require("express")();
let http = require("http").Server(app);
let io = require("socket.io")(http);
io.on("connection", socket => {
console.log("user connected");
socket.on("disconnect", function() {
console.log("user disconnected");
});
socket.on("message", message => {
console.log("Message Received: " + message);
io.emit("message", { type: "new-message", text: message });
});
data=[{id:1,name:'ashish'},{id:2,name:'mishra1'}];
socket.emit('test event',data);
});
http.listen(5000, () => {
console.log("started on port 5000");
});
解决方案
尝试这个
在节点 index.js
// Init
const app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
export const socket = (update) => {
io.sockets.emit('updates', {availability: update});
};
在角
npm i ngx-socket-io
在您的应用模块中,请导入
import {SocketIoConfig, SocketIoModule} from "ngx-socket-io";
const config: SocketIoConfig = { url: 'http://192.168.8.164:3000', options: {} };
SocketIoModule.forRoot(config)
在您的服务文件中
constructor(private socket: Socket) {
}
listenSocket() {
return this.socket
.fromEvent<any>('updates')
.map(data => data.availability);
}
在你的组件的 onInit
this.particularService.listenSocket()
.subscribe(msg => {
//do whatever u want
});
推荐阅读
- android - TextFormField 与现有 android 应用程序中添加的 Flutter 键盘重叠
- c++ - 在宏中使用 __FUNCSIG__ 将其扩展为空
- reactjs - 如何使第一个块与第二个块的高度相同?
- regex - Nginx 匹配变量
- javascript - 在我的代码中,我试图遍历一个对象。这个 Vue js 代码会被认为是“反模式”吗?
- php - SiteOrigin Page Builder 删除“恢复到编辑器”按钮
- python - 满足条件时计算分位数
- angular - 自定义指令在角度模块中不起作用?
- c# - 从 asp.net mvc web app 发送每日通知邮件
- python - Pyhook 在尝试将窗口名称解释为 ASCII 时崩溃