zookeeper注册服务信息---获取IP地址及空闲端口(nodejs typescrip)
来源:互联网 发布:7z解压软件for mac 编辑:程序博客网 时间:2024/05/17 16:53
本示列使用typescript编写 2017-10-17日更新 修复多网卡获取IP问题。
功能调用 getIdlePort(callback: (port: number, ip?: string) => void)在回调中获得本机空闲端口
及IP地址,IP地址是数组类型。自己打印出来需要使用哪个ip地址自行配置吧。一般多网卡会有多个IP地址。
简要说明下本机IP地址是随时可以获取的,空闲服务端口号获取步骤如下:利用net本身,启动获取空闲的端
口,在 listenListeningHandle监听中获取空闲端口号 、listenCloseHandle监听中释放检测到的空闲端
口。如没释放直接使用,也只能呵呵了
type Platform = 'aix'
| 'android'
| 'darwin'
| 'freebsd'
| 'linux'
| 'openbsd'
| 'sunos'
| 'win32'
| 'cygwin';
| 'android'
| 'darwin'
| 'freebsd'
| 'linux'
| 'openbsd'
| 'sunos'
| 'win32'
| 'cygwin';
系统类型,自己改源码吧。只有win32系统
其中typescrip 可以生成任意版本的JS代码 如ES5 .ES6等等
获取服务器 ip地址及端口号
import { BaseNetServer } from "../common/BaseNetServer";import * as net from "net";import { ServerEvent, SocketEvent } from '../Enum/SocketEvent';import * as os from "os";/** * 获取服务器 ip地址及端口号 * * @export * @class ServerPort */export class ServerPort { public _server: net.Server = net.createServer(); public _NetServer: BaseNetServer = new BaseNetServer(this._server); protected _callback?: (port: number, ip?: string) => void; protected _port: number; protected _ip: string | undefined; /** * 获取空闲端口号及IP地址。 * * @param {(port: Number, ip?: string) => void} callback * @memberof ServerPort */ public getIdlePort(callback: (port: Number | number, ip?: string) => void) { this._callback = callback; this._server.addListener(ServerEvent.LISTENING, this.listenListeningHandle.bind(this)); this._NetServer.startListener(0); } /** * 获取IP地址 * * @returns * @memberof ServerPort */ public getIp() { var IPv4: Array= new Array; //console.log(process.platform); //console.log(os.networkInterfaces()); if (process.platform === 'darwin') { for (let i = 0; i < os.networkInterfaces().en0.length; i++) { if (os.networkInterfaces().en0[i].family == 'IPv4') { IPv4.push(os.networkInterfaces().en0[i].address); } } } else if (process.platform === 'win32') { for (let item in os.networkInterfaces()) { let list = os.networkInterfaces()[item]; for (let i = 0; i < list.length; i++) { if (list[i].family == 'IPv4') { IPv4.push(list[i].address); } } } } //console.log(IPv4); return IPv4; } /** * Listening * * @protected * @memberof BaseServer */ protected listenListeningHandle(): void { if (this._callback) { this._port = this._server.address().port; this._ip = this.getIp(); this._NetServer._server.close(this.listenCloseHandle.bind(this)); } } /** * 关闭 * * @protected * @memberof ServerPort */ protected listenCloseHandle(): void { if (this._callback) { this._callback(this._port, this._ip); } this._callback = undefined; console.log("Server关闭!"); }}
net简单封装
import * as net from 'net';import { ServerEvent, SocketEvent } from '../Enum/SocketEvent';/** * net.Server简单封装 * * @export * @class BaseServer */export class BaseNetServer { protected _server: net.Server;// = net.createServer(); constructor(server: net.Server) { this._server = server; } /** * 启动监听 * * @memberof BaseServer */ public startListener(port: number) { this._server.addListener(ServerEvent.CONNECTION, this.listenConnectionHandle.bind(this)); this._server.addListener(ServerEvent.CLOSE, this.listenCloseHandle.bind(this)); this._server.addListener(ServerEvent.ERROR, this.listenErrorHandle.bind(this)); this._server.addListener(ServerEvent.LISTENING, this.listenListeningHandle.bind(this)); this._server.listen(port); } /** * connection连接监听 * * @protected * @memberof BaseServer */ protected listenConnectionHandle(socket: net.Socket): void { //console.log("BaseServer connection 连接成功!base!"); } /** * * * @protected * @param {Error} error * @memberof BaseServer */ protected listenErrorHandle(error: Error): void { console.log("BaseServer error:::::::" + error); throw error; } /** * Listening * * @protected * @memberof BaseServer */ protected listenListeningHandle(): void { //var port = this._server.address().port; //console.log(port); //console.log("Listening!"); } /** * close连接关闭监听 * * @protected * @memberof BaseServer */ protected listenCloseHandle(): void { //console.log("Server关闭!"); }}/** * net.socket简单封装 * * @export * @class BaseSocket */export class BaseSocket { protected _socket: net.Socket; constructor(socket: net.Socket) { this._socket = socket; } /** * 启动监听 * * @memberof BaseSocket */ public startListener() { this._socket.addListener(SocketEvent.DATA, this.listenDataHandle.bind(this)); this._socket.addListener(SocketEvent.CLOSE, this.listenCloseHandle.bind(this)); this._socket.addListener(SocketEvent.ERROR, this.listenErrorHandle.bind(this)); } /** * 接收客户端数据监听 * * @protected * @param {Buffer} data * @memberof BaseSocket */ protected listenDataHandle(data: Buffer): void { //console.log('BaseSocket 接收到的数据:', data.toString()); } /** * error监听 * * @protected * @param {Error} error * @memberof BaseSocket */ protected listenErrorHandle(error: Error): void { console.log("BaseSocket error:" + error); throw error; } /** * 关闭监听 * * @protected * @memberof BaseSocket */ protected listenCloseHandle(): void { //console.log("BaseSocket socket连接关闭!"); } /** * socket end sockect关闭连接 * * @memberof BaseSocket */ public socketEndHandle(): void { try { this._socket.end(); } catch (error) { console.log("BaseSocket sockect关闭连接:" + error); } }}//}
enum
/** * net.Socket 的监听枚举 * * @export * @enum {number} */export enum SocketEvent { CLOSE = "close", CONNECT = "connect", DATA = "data", DRAIN = "drain", END = "end", ERROR = "error", LOOKUP = "lookup", TIMEOUT = "timeout"}/** * net.ServerEvent 的监听枚举 * * @export * @enum {number} */export enum ServerEvent{ CLOSE ="close", CONNECTION="connection", ERROR="error", LISTENING="listening"}
阅读全文
0 0
- zookeeper注册服务信息---获取IP地址及空闲端口(nodejs typescrip)
- zookeeper注册服务信息---注册服务信息/获取服务信息(nodejs typescrip)
- c#获取IP地址及端口号
- 获取IP地址及网卡信息
- 获取ip地址及网卡信息
- linux UDP通讯 获取源IP地址端口信息
- 获取ip地址信息
- 获取服务IP地址
- C# 获取空闲端口及查看已用端口
- 自动获取本机IP和空闲端口
- Socket获取客户端IP地址及端口号
- Socket获取客户端IP地址及端口号
- 获取系统空闲端口
- spring cloud配置注册中心显示服务的ip地址和端口
- 从淘宝服务器IP地址服务获取IP地址信息的方法
- 获取客户端IP地址及所在城市信息的资料
- [VC++]编程获取系统网卡列表及IP地址信息
- .NET获取IP地址及用户名等信息的源代码
- 链表的常见操作入门(一)
- Codeforces Round #433 (Div. 1, based on Olympiad of Metropolises) C. Boredom(主席树)
- OpenGL2.0 和 OpenGL3.0 的不同与共同点
- JSP知识点汇总(一)
- 负载均衡
- zookeeper注册服务信息---获取IP地址及空闲端口(nodejs typescrip)
- 使用AppBarLayout+CollapsingToolbarLayout实现自定义工具栏折叠效果
- 对抗自编码
- 简单快速了解Vue.js的开发流程
- 优化mysql查询的方法
- 第一周、课时12:js三个循环之for循环
- iOS 开启OpenGL错误调试
- 函数指针
- 记一次redis导致core文件剧增,服务器磁盘爆表