精华内容
下载资源
问答
  • Socket.io中的命名空间
    千次阅读
    2022-01-27 10:19:08

    什么是Socket.io中的命名空间?

    所谓的命名空间,在一个域中发消息,只有当前的域的socket能够收到消息,其他域的消息则不能。

    1. 服务端:通过io.of创建命名空间。

    2. 服务端进行广播的时候,也需要使用命名空间。

    3. 客户端向服务端发起连接的时候也需要指定命名空间。

    egg.js中如何集成socket.io?

    参考文档:https://eggjs.org/zh-cn/tutorials/socketio.html

    1. 安装egg-socket.io
    npm i egg-socket.io --save
    
    1. 在plugin.js中进行插件配置
      io: {
        enable: true,
        package: 'egg-socket.io',
      }
    
    1. 在conig.default.js中进行如下配置
      config.io = {
        init: {}, // passed to engine.io
        namespace: {
          '/': {
            connectionMiddleware: [],
            packetMiddleware: [],
          },
        },
      };
    
    1. 指定io触发的时候连接的中间件
      config.io = {
        init: {}, // passed to engine.io
        namespace: {
          '/': {
            connectionMiddleware: ["connection"],  // 建立连接的时候,触发的中间件
            packetMiddleware: [],
          },
        },
      };
    
    1. 中间件connection.js
    module.exports = app => {
      return async (ctx, next) => {
        console.log("连接成功。。。");
        ctx.socket.emit('serverMsg', '连接成功');
        await next();
      };
    };
    
    1. 客户端引入socket.io的cdn时尽量引入版本2的,因为版本2的可以直接跨域。
    <script src="https://cdn.bootcdn.net/ajax/libs/socket.io/2.2.0/socket.io.js"></script>
    
    1. 分清是一对一广播还是一对多广播
    • 一对一广播
    ctx.socket.emit('serverMsg', `Hi! I've got your message: ${message}`);
    
    • 一对多广播
    await ctx.app.io.emit('serverMsg', `Hi! I've got your message: ${message}`);
    
    1. 学会使用分组广播
    app.io.to(roomId).emit("serverMsg","this is addCart msg");
    

    下面是分组广播但是不通知自己的情况:

    ctx.socket.broadcast.to(roomId).emit('serverMsg',"this is addCart msg");
    

    客户端发送请求的实例

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    
    <head>
        <title>Socket.io客户端1</title>    
        <script src="https://cdn.bootcdn.net/ajax/libs/socket.io/2.2.0/socket.io.js"></script>
        <!-- <script src="https://cdn.jsdelivr.net/npm/socket.io-client@4.4.1/dist/socket.io.min.js"></script> -->
    </head>
    <body>
        <h2>客户端111</h2>
        <br>
        <button onclick="send()">发送消息</button>
    </body>
    
    <script>
      //1、连接socket.io服务器
      var socket = io.connect("http://192.168.1.7:7001?roomId=20");
    
      socket.on("serverMsg",function(serverData){
        console.log(serverData);
      })
     
      function send(){
        socket.emit("clientMsg","client AddCart");
      }
    </script>
    </html>
    

    总结

    客户端发送socket请求的时候,如果服务端使用的是egg.js,则建议尽量使用V2版本,因为这个版本的socket不需要配置跨域,V4版本则需要配置跨域。在客户端与服务端通信时,尽量统一监听字段,这样可以有效防止出错。

    更多相关内容
  • cxf 命名空间修改

    千次阅读 2019-11-08 15:50:33
     xmlInterceptor 为报文输出过滤器,在过滤器里打印了响应的报文 开发环境和测试环境生成的报文命名空间还是不一致,查资料分析后应该是在测试服务器上配置中jaxws:properties 标签中的配置没有生效(entry 标签...
    • 背景

    最近系统改造,由原来的GP库改为大数据查询,于是新建一个基于大数据查询的webService,主要依赖版本如下:

    spring:3.1.2

    cxf :3.1.6

    hadoop:CDH6.2.0

    测试环境 容器:weblogic 12.2.13

    开发环境容器:tomcat 8.5.20

    其它依赖jar包不在一一说明,其中Spring 和 CXF 版本都是和老的项目相同。

    • 问题:

    新项目在测试环境生成的soap响应报文和老项目报文命名空间存在差异,见下图(左为新项目在测试环境报文,又为老项目在测试环境报文)<ns0:为cxf 默认的命名空间  <s: 为要求生成的标准的命名空间

    郁闷的是相同的代码在开发环境返回的报文命名空间和老项目是相同的,cxf 报文入口和输出配置如下

     xmlInterceptor 为报文输出过滤器,在过滤器里打印了响应的报文 开发环境和测试环境生成的报文命名空间还是不一致,查资料分析后应该是在测试服务器上配置中jaxws:properties 标签中的配置没有生效(entry 标签可以修改命名空间为自己想要的名字)

    • 解决

    网上查资料发现有个外国哥们也遇到了差不多相同的问题 地址:http://cxf.547215.n5.nabble.com/How-to-customize-namespaces-position-and-prefix-in-CXF-response-td3423069.html

    看到他的问题应该是容器的解析xml的jar包版本太低,查看猜测是项目weblogic.xml配置文件中配置的优先 加载项目的jar包的配置没有生效,所以从新配置weblogic.xml优先加载项目jar包 从新启动发布服务用soapUI验证报文中命名空间已改为自己项目中配置的了。

     

    展开全文
  • springcloud nacos命名空间、动态配置

    千次阅读 2019-10-22 18:50:21
    spring cloud 集成 nacos(单机版),上一篇已说明,在这里就不做重复说明,以下直接是nacos命名空间和配置在springcloud中的使用。 1、nacos创建Test命名空间,创建完成后,列表中多了一条Test记录 2、配置...

     

     

    spring cloud 集成 nacos(单机版),上一篇已说明,在这里就不做重复说明,以下直接是nacos命名空间和配置在springcloud中的使用。

    1、nacos创建Test命名空间,创建完成后,列表中多了一条Test记录

    2、配置bootstrap.properties(或者bootstrap.yml,以下使用的是properties)。注:不能直接写在application.yml中,不然会报错。(加载顺序:boostrap -- 》 application)

    #指定开发环境
    #spring.profiles.active=test
    #服务器地址
    spring.cloud.nacos.config.server-addr=127.0.01:8848
    #默认为Public命名空间,可以省略不写,新建的命名空间,需要使用命名空间ID, 不能使用名称
    #spring.cloud.nacos.config.namespace=13c9e857-2f36-4de1-956f-890d322ed7aa
    #指定配置群组 --如果是Public命名空间 则可以省略群组配置
    spring.cloud.nacos.config.group=DEFAULT_GROUP
    #文件名 -- 如果没有配置则默认为 ${spring.appliction.name}
    #spring.cloud.nacos.config.prefix=bds2
    #指定文件后缀
    spring.cloud.nacos.config.file-extension=yaml
    
    spring.cloud.nacos.discovery.server-addr=127.0.01:8848
    #spring.cloud.nacos.discovery.namespace=13c9e857-2f36-4de1-956f-890d322ed7aa

    3、nacos新增配置(以yaml格式为例), 新增的文件必须是以服务名为前缀.eg:项目的服务名为bds2,则新建的配置名称为bds2.yaml

    4、pom.xml 引入jar

    <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
         <version>0.2.2.RELEASE</version>
    </dependency>
    <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
         <version>0.2.2.RELEASE</version>
    </dependency>

    5、Application.java 文件注入:@EnableDiscoveryClient

    6、调用upload.path,测试是否成功

     @Value("${upload.path}")
     private String dirPath;

     

     

     

    展开全文
  • ROS之命名空间

    千次阅读 多人点赞 2017-07-21 17:02:24
    已经学ROS快两个月了,一开始对ROS 命名空间,参数,参数服务器,重映射没认真看,后来发现很重要,它是学习ROS代码的基础。我们都知道ros以topic通信,但是只靠topic通信是远远不够的,于是使用客服端服务器、...

    已经学ROS快两个月了,一开始对ROS 命名空间,参数,参数服务器,重映射没认真看,后来发现很重要,它是学习ROS代码的基础。我们都知道ros以topic通信,但是只靠topic通信是远远不够的,于是使用客服端服务器、actionlib、参数服务器来补充,这几种都是通信的机制。但还不够,为了方便又加入了命名空间,重映射。只有清楚了这些,其实才算对ros有了初步了解,下面的几个文章我将分别介绍。

    在介绍之前,我先抱怨一下,对于只学过C语言的我,没有写过什么项目,然后自己学习ROS,简直痛苦。想找几个资料,英文的根本看不懂,四级都没过,找中文的基本都是直译过来的,而且大多数人的理解,或多或少的都有点错误,当然,我的理解应该有点错误的,希望明白之人能指出,感激不尽。

    在C++中的命名空间,using namespace std,std就是名空间,这里的命名空间跟它差不多,但是比它更多,一层嵌套一层,用的特别灵活。先举个简单的例子,然后细说。

    我们先运行一个小乌龟:

    rosrun turtlesim turtlesim_node 


    turtlesim是一个包名,turtlesim_node是执行文件名,可以与节点名相同,也不可以不同。这里的节点名是 /turtlesim。说明可能初始化的时候是这样的,为什么是可能,因为重映射可以改变:

    ros::init(argc, argv, "turtlesim");

    节点名前面加个“/”,这意味这个节点是全局空间的。另外说下,节点是有类型的,节点的类型就是节点所在包名和可执行文件名的加。一般的定义节点句柄:

    ros::NodeHandle n;

    NodeHandle是一个类,然后我们实例化的一个对象n.这种情况默认n这个节点是全局命名空间下的。你可以认为"/"这个斜杠就是全局名空间。现在我们来改变这个节点的名空间,通过重映射,我们先用重映射,以后再讲。


    你会发现,这个节点的名变为/my/turtlesim,此时,节点所在的空间发生了变化,我们把这个节点从全局名空间放进了一个/my的名空间下。于是节点内的所有参数,服务,话题也都放在了/my的命名空间下。

    你会发现,它所发布的和订阅的话题,服务都在这个名空间,这意味着它现在只会订阅和发布这个名空间下的话题。

    这个时候运行rosrun turtlesim turtle_teleop_key ,是不会控制小乌龟的,因为它只会发布/turtel1/cmd_vel话题,不会发布/my/turtel1/cmd_vel。

    这个时候你可能懂一点了,节点,话题,服务,包括参数都是有名空间的,这个名空间约束着是它们的范围。这个时候你可能会想,那不在一个名空间节点是不是就无法通信了,显然这种想法是错误的,这违背了我们通信的初衷,我们通过重映射和参数服务器,很容易让不同命名空间的节点都能通信。好吧,先简单的通过重映射使他们通信,具体下一篇文再讲,这一篇主要记录命名空间。


    看到没,重映射不仅可以把命名空间改变,还可以将发布的话题给改变(还可改变参数的空间),这样/my空间下的乌龟就可以移动了。当然你也可以直接将这个节点的名空间改为/my,这样他们在同一个命名空间,当然可以直接通信了。

    上面说的是全局命名空间,还有一个相对命名空间,/turtle1/cmd_vel就是相对命名空间,它在/my的命名空间下,发布/turtle1/cmd_vel话题,解析器会把它解析成/my/turtle1/cmd_vel话题。发布的/turtle1/cmd_vel话题相对/my空间下是/turtle1/cmd_vel话题,对于全局它是/my/turtle1/cmd_vel话题。

    接下来我们看看节点句柄的构造函数,也可以跳过:

    namespace ros
    {
    
      class NodeHandleBackingCollection;
    
      /**
       * \brief roscpp's interface for creating subscribers, publishers, etc.
       *
       * This class is used for writing nodes.  It provides a RAII interface
       * to this process' node, in that when the first NodeHandle is
       * created, it instantiates everything necessary for this node, and
       * when the last NodeHandle goes out of scope it shuts down the node.
       *
       * NodeHandle uses reference counting internally, and copying a
       * NodeHandle is very lightweight.
       *
       * You must call one of the ros::init functions prior to instantiating
       * this class.
       *
       * The most widely used methods are:
       *   - Setup:
       *    - ros::init()
       *   - Publish / subscribe messaging:
       *    - advertise()
       *    - subscribe()
       *   - RPC services:
       *    - advertiseService()
       *    - serviceClient()
       *    - ros::service::call()
       *   - Parameters:
       *    - getParam()
       *    - setParam()
       */
      class ROSCPP_DECL NodeHandle
      {
      public:
        /**
         * \brief Constructor
         *
         * When a NodeHandle is constructed, it checks to see if the global
         * node state has already been started.  If so, it increments a
         * global reference count.  If not, it starts the node with
         * ros::start() and sets the reference count to 1.
         *
         * \param ns Namespace for this NodeHandle.  This acts in addition to any namespace assigned to this ROS node.
         *           eg. If the node's namespace is "/a" and the namespace passed in here is "b", all 
         *           topics/services/parameters will be prefixed with "/a/b/"
         * \param remappings Remappings for this NodeHandle.
         * \throws InvalidNameException if the namespace is not a valid graph resource name
         */
        NodeHandle(const std::string& ns = std::string(), const M_string& remappings = M_string());
      
        NodeHandle(const NodeHandle& rhs);
        
        NodeHandle(const NodeHandle& parent, const std::string& ns);
    
        NodeHandle(const NodeHandle& parent, const std::string& ns, const M_string& remappings);
     
        ~NodeHandle();
    }

    是不是发现他有多个构造函数,

    ros::init(argc, argv, "my_node_name");
    ros::NodeHandle nh("/my_node_handle_namespace");
    我们创建节点句柄nh时,指明了它的命名空间,所以nh的命名空间为/my_node_handle_namespace,

    所以这个节点里的所有的参数,话题前面都应该有/my_node_handle_namespace

    最后一种命名空间是私有命名空间,私有名称,以一个波浪字符(~)开始。和相对名称一样,私有名称并不能完全确定它们自身所在的命名空间,而是需要ROS 客户端库将这个名称解析为一个全局名称。与相对名称的主要差别在于,私有名称不是用当前默认命名空间,而是用的它们节点名称作为命名空间。

    ros::init(argc, argv, "my_node_name");
    ros::NodeHandle nh1("~");
    ros::NodeHandle nh2("~foo");
     ros::Subscriber sub1 = nh1.subscribe("my_private_topic", ...);
     ros::Subscriber sub2 = nh2.subscribe("my_private_topic", ...);
    sub1订阅的话题是my_node_name/my_private_topic

    sub2订阅的话题是my_node_name/foo/my_private_topic

    到这里,我相信大家对命名空间似懂非懂,这个东西到底是干什么的。如果你懂上面说的东西,接下来,看看参数的使用,似乎就懂命名空间到底是干什么的了。

    展开全文
  • C#常用命名空间

    千次阅读 2017-09-15 17:52:46
    C#常用命名空间 一、基础命名空间 System 处理内建数据、数学计算、随机数的产生、环境变量、垃圾回收器及一些常见的异常和特征. System.Collections 包含了一些与集合相关...
  • 1、什么是命名空间命名空间设计目的是提供一种让一组名称与其他名称分隔开的方式。在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。 我们举一个计算机系统中的例子,一个...
  • soap的命名空间

    千次阅读 2017-06-06 17:13:28
    SOAP 命名空间 URI 要求 命名空间 URI 为给定的 SOAP 操作指定用于组成 SOAP 请求封装的 XML 命名空间。如果命名空间 URI 未被定义,将使用 URL 子句中的域组件。服务器端的 SOAP 处理器使用此 URI 来了解请求的...
  • 分布式文件系统之创建 DFS 命名空间

    千次阅读 2017-11-27 10:41:00
    有两种类型的DFS命名空间: 基于域的命名空间 独立命名空间 创建DFS命名空间 ...3、在“命名空间服务器”界面,选择“浏览”,添加服务器; 4、在“选择计算机”界面,输入服务器名称,如果不知道...
  • 文章目录查看所有的Pod查看所有的deployment查看所有namespace对应的Pod...在默认的命名空间namespace中查看所有的Pod显示没有找到,加入-A参数表示查看所有命名空间(namesqpace)上的Pod。 查看所有的Pod [root@...
  • nacos命名空间namespace用法

    万次阅读 2021-01-24 23:20:24
    nacos用作注册中心时,增加一个命名空间namespace的概念,可以用一套nacos注册中心去管理多套不同的环境服务器,此时的nacos显然一个平台的概念了。 nacos命名空间使用 1、创建命名空间 打开nacos控制台,点击...
  • 3. DFS命名空间+DFS复制 17 3.1. 简介 17 3.2. 策略 17 3.3. 注意事项 18 3.4. 安装步骤 18 3.5. 新建命名空间 19 3.6. 新建共享文件 23 3.7. 新建复制组 30 4. 总结 34 5. 疑难杂症 35 5.1. DFS服务在 AD初始化完毕...
  • C#常用命名空间列表

    千次阅读 2017-05-10 09:33:57
    C#常用命名空间 一、基础命名空间 System 处理内建数据、数学计算、随机数的产生、环境变量、垃圾回收器及一些常见的异常和特征. System.Collections 包含了一些与集合相关的类型,...
  • 在客户端/服务器应用程序中服务使用一个全局的命名空间。还有,对这些对象而言,每个客户端会话都有一个独立的命名空间。比如Windows Vista。 独立客户端会话命名空间使能多个客户端互不干扰地去跑同样的应用程序。...
  • 在关系数据库系统中,命名空间namespace指的是一个表的逻辑分组,同一组中的表有类似的用途。命名空间的概念为即将到来的多租户特性打下基础: 配额管理(Quota Management (HBASE-8410)):限制一个namespace可以...
  • 什么是分布式文件系统?...分布式文件系统的设计基于客户机/服务器模式。一个典型的网络可能包括多个供多用户访问的服务器。另外,对等特性允许一些系统扮演客户机和服务器的双重角色。 意思就是,原本存在本地的...
  • ASP.NET的命名空间

    千次阅读 2017-03-17 09:08:18
    ASP.NET的命名空间  命名空间(namespace)  ASP.NET中的各种语言使用的一种代码组织的形式。  通过命名空间来分类,区别不同的代码功能,也是ASP.NET中所有类的完全名称的一部分。  命名空间不过是数据类型的...
  • 分布式文件系统(DFS命名空间)

    千次阅读 2017-11-16 23:34:00
    分布式文件系统(DFS)包括DFS命名空间和DFS复制两种技术,DFS命名空间可以使用户从一个入口(一个共享文件夹)访问位于多台计算机中的共享资源;DFS复制技术可以通过网络连接多个服务器上的文件夹,提供容错且灵活...
  • namespace命名空间-之使用

    千次阅读 2017-05-31 21:12:09
    由于各种原因,用户空间命名空间的实现算是一个里程碑了,首先是历时五年最复杂命名空间之一的user命名空间开发完结,其次是内核绝大多数命名空间已经实现了,...新的命名空间可能被添加进内核,也可能需要对当前的
  • Node.js 全局变量命名空间命名空间中require模块的冲突  在《Node.js开发实战详解》的第三章里,有这样一段代码。    其中的全局变量lib中require了模块staticModule和router。  其中的router代码中运用...
  • 数据库服务器安装与配置

    万次阅读 多人点赞 2017-04-18 13:02:25
    数据库服务器主要用于存储、查询、检索企业内部的信息,因此需要搭配专用的数据库系统,对服务器的兼容性、可靠性和稳定性等方面都有很高的要求。   1、基本概念 数据库服务器其实就是装有一台数据库的Server,...
  • linux服务器怎么查看磁盘(及目录)剩余空间大小 对于我等比较懒的人来说,都是临时抱佛脚的,完整的学linux是不可能的,只有用的时候才会在网上找一下教程用用。今天就为大家讲下? 1、df命令是linux系统以磁盘分区...
  • zookeeper 一 : 客户端命名空间

    千次阅读 2017-08-11 10:32:58
    如果一个zookeeper客户端设置了Chroot,那么该客户端对服务器的任何操作,都将会被限制在自己的命名空间下。客户端可以通过在connectString中添加后缀的方式来设置Chroot,如下所示: 192.168.0.1:2181,192.168....
  • --提供HBase的状态,例如,服务器的数量。 status --提供正在使用HBase版本。 version --表引用命令提供帮助。 table_help --提供有关用户的信息。 whoami 1.创建表 (1)语法 create <table> , { ...
  • 1、创建命名空间 新建一个创建命名空间的yaml文件: vim namespaces.yaml set paste一下内容 apiVersion: v1 kind: Namespace metadata: name: paas-cloud labels: name: paas-cloud --- apiVersion...
  • Ubuntu/Linux Server 服务器系统安装

    千次阅读 2017-08-15 15:09:10
    Ubuntu/Linux Server 服务器系统安装本文概要: Ubuntu Server版本如何选择 Ubuntu Server靠谱下载地址 Ubuntu Server版本系统... 由于公司需要搭建内网测试服务器,其中需要搭建Linux的服务环境,通过讨论决定使用U
  • Glusterfs全局统一命名空间

    万次阅读 热门讨论 2011-12-02 21:20:19
    全局统一命名空间 Glusterfs采用了全局统一命名空间设计,将磁盘和内存资源聚集成一个单一的虚拟存储池进行管理,并在此命名空间中使用NFS/CIFS等标准协议来访问应用数据。与其他分布式文件系统有所不同的是,...
  • HP服务器命名规则

    千次阅读 2013-07-15 20:22:46
    hp服务器命名规则的背景介绍 首先,我们先说明一下,这里讲的hp服务器命名规则主要是针对惠普X86服务器体系进行介绍的。非X86服务器在日常服务器购买中我们接触的机会较少,本文在这里不做累述。 依照HP服务器...
  • 因此,在实际开发中,开发人员常常使用应用服务器自带的JNDI实现来完成数据源的配置与管理——使用JNDI方式后,开发人员可以完全不需要关心与数据库相关的任何信息,包括数据库类型、JDBC驱动类型以及数据库账户等。...
  • C#各命名空间用途——c#

    千次阅读 2014-11-04 17:39:41
    命名空间 .NET Framework 类库提供下列命名空间: ▲Microsoft.CSharp 包含支持用 C# 语言进行编译和代码生成的类。 ▲Microsoft.JScript 包含支持用 JScript 语言进行编译和代码生成的类。 ...
  • CXF 修改默认命名空间

    千次阅读 2013-01-28 11:01:44
    只测了发布服务器端时加到 endpoint 结点下可用。 第二种方法,代码直接调用: Client client = ClientProxy.getClient(port); client.getOutInterceptors(); HashMap, String> hmap = new HashMap, String>(); ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 248,713
精华内容 99,485
关键字:

命名空间服务器需要安装