socket长连接-client

心跳告警与数据传输
本文介绍了一种基于Python的长连接心跳机制实现方案,详细描述了如何通过socket通信发送心跳告警信息,并从CSV文件读取数据进行GBK编码转换及发送的过程。涉及的技术包括socket编程、CSV文件操作、编码转换等。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import socket
import sys
import time,os
from getLog import FinalLogger
import csv
import codecs
reload(sys)
sys.setdefaultencoding('utf-8')

'''
client端
长连接,心跳
'''
class dataProcess:
    def __init__(self):
        self.logger = FinalLogger.getLogger()
        self.host = "*"
        self.port = 5557
        self.sock = self.doConnect(self.host,self.port)

    def doConnect(self,host,port):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try :
            sock.connect((host,port))
        except :
            pass
        return sock

    def sendData(self):
        try:
            alarmData = self.alarmData()
            #print alarmData
            if alarmData:
               strData = alarmData
            else:
               strData = self.heartBeat() 
            self.sock.send(strData)
            print 'send ok'  
            print strData
            self.logger.info(strData)
            fileName = "/data/FBAndIPTVsocket/scriptFile/result.csv"
            os.system(">%s" % (fileName));
        except socket.error :
            print "socket error,do reconnect "
            self.sock = self.doConnect(self.host,self.port)
            time.sleep(3)
        except :
            print 'other error occur '
            time.sleep(3)

    def alarmData(self):
        fileName = "/data/FBAndIPTVsocket/scriptFile/result.csv"
        os.system("sed -i 's/\"//g' %s" % (fileName));
        strData=""
        f = codecs.open(fileName,'r','utf-8')
        s = f.readlines()
        f.close()
        for line in s:
            strData = strData + line.encode('GBK')
        return strData

    def heartBeat(self):
        strData1 = "<AlarmStart>"
        strData2 = "IntVersion:V1.0.0"
        strData3 = "MsgSerial:"
        strData4 = "AlarmUniqueId:" + '91'
        strData5 = "AlarmUniqueClearId:"
        strData6 = "NeName:"
        strData7 = "NeIp:"
        strData8 = "SystemName:"
        strData9 = "EquipmentClass:"
        strData10 = "Version:V1.0"
        strData11 = "LocateNeName:"
        strData12 = "LocateNeType:"
        strData13 = "LocateInfo:"
        strData14 = "EventTime:"
        strData15 = "CancelTime:"
        strData16 = "VendorSeverity:三级告警"
        strData17 = "VendorAlarmId:"
        strData18 = "AlarmTitle:" + '心跳告警'
        strData19 = "ProbableCauseTxt:"
        strData20 = "AlarmText:"
        strData21 = "AlarmStatus:1"
        strData22 = "Vendor:" + '中兴'
        strData23 = "maintain_group:"
        strData24 = "<AlarmEnd>"
        strDataU8 = "\r\n" + strData1 + "\r\n" + strData2 + "\r\n" + strData3 + "\r\n" + strData4 + "\r\n" + strData5 + "\r\n" + strData6 + "\r\n" + strData8 + "\r\n" + strData9 + "\r\n" + strData10 + "\r\n" + strData11 + "\r\n"+ strData12 + "\r\n" + strData13 + "\r\n" + strData14 + "\r\n" + strData15 + "\r\n" + strData16 + "\r\n" + strData17 + "\r\n" + strData18 + "\r\n" + strData19 + "\r\n" + strData20 + "\r\n" + strData21 + "\r\n" + strData22 + "\r\n" + strData23 + "\r\n" + strData24 + "\r\n"
        strData = strDataU8.encode('GBK')
        return strData

if __name__ == "__main__":
    while True:
        nDataProcess = dataProcess();
        nDataProcess.sendData();
        time.sleep(10)

在Vue 3中使用`socket.io-client`,可参考以下使用方法和示例: ### 使用方法 1. **安装socket.io-client**:要在Vue 3项目里使用`socket.io-client`,需先安装该库,可通过npm或yarn进行安装。 ```bash npm install socket.io-client ``` 或 ```bash yarn add socket.io-client ``` 2. **创建socket实例**:在组件中引入`socket.io-client`并创建socket实例,连接到Socket.IO服务器。 3. **监听事件**:使用`socket.on()`方法监听服务器发送的事件。 4. **发送事件**:使用`socket.emit()`方法向服务器发送事件。 ### 示例 以下是一个简单的Vue 3组件示例,展示了如何使用`socket.io-client`实现实时聊天功能: ```vue <template> <div> <h1>实时聊天</h1> <div v-for="(msg, index) in messages" :key="index">{{ msg }}</div> <input v-model="message" placeholder="输入消息" @keyup.enter="sendMessage"> <button @click="sendMessage">发送</button> </div> </template> <script setup> import { ref, onMounted } from 'vue'; import io from 'socket.io-client'; // 创建socket实例 const socket = io('http://localhost:3000'); // 存储消息的数组 const messages = ref([]); // 输入的消息 const message = ref(''); // 监听连接成功事件 onMounted(() => { // 连接成功 socket.on("connect", () => { console.log(socket.id, "监听客户端连接成功-connect"); }); // 收到的消息 socket.on("receiveMsg", (msg, id) => { messages.value.push(`${id}:${msg}`); }); }); // 发送消息的方法 const sendMessage = () => { if (message.value) { // 向服务器发送消息 socket.emit('sendMsg', message.value); message.value = ''; } }; </script> ``` 上述示例中,在组件里创建了`socket`实例并连接到Socket.IO服务器。在`onMounted`钩子中监听了`connect`和`receiveMsg`事件,当连接成功时会在控制台输出信息,收到消息时会将消息添加到消息列表中。同时,提供了一个输入框和按钮,用于用户输入并发送消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值