Internal Chat 初体验

我们公司要开发一个CS结构的聊天软件,所以我想找一个开源的chat软件学习学习,不要太复杂的,于是就找到了Internal chat。网上除其主站外,没有任何资料。于是我把自己学习时翻译出的资料拿来共享一下(不一定翻译的完全准确) :) 。
现在这个软件在我电脑上已经可以使用了,功能比较少,但是适合学习。 :) :)
[size=small][align=center]Internal Chat 初体验[/align][/size]
Internal Chat是一个包括服务器端与客户端的即时消息聊天系统。Internal Chat完全采用Java开发,使用PostgreSQL作为DBMS,Jetty作为内嵌http服务器,支持SSL等。
官方网站:http://www.avoware.com/intchat/

一、描述
Internal Chat是一个包括服务器端与客户端的即时消息聊天系统。Internal Chat完全采用Java开发,因此它可以运行在任何支持java的平台上(MS Windows, Linux, xBSD, Solaris 等等)
Internal Chat 采用开放的工业协议,它通过HTTP/HTTPS协议,采用了AJAX请求的强大功能和开放的数据库管理系统(例如:PostgreSQL 和 MySQL.)。
二、历史
略.
三、特点
[list=1]
[*]即时消息。用户能够发送信息和传送文件。服务器可以设置内部网络,因此你不用担心公网的安全问题
[*]非常简单的用户和管理员角色
[*]HTTP被做为传输协议使用
[*]支持SSL
[*]任意选择消息的接收者
[*]你可以为每一个消息类型确定模板。例如,你可以确定工作或一些帮助面板(现在可以是一些计划,但是在将来计划把他制作成插件或服务器单元模块)。在系统中通过确定两种消息类型来确定:“文件传送”和普通消息
[*]添加和删除用户,使之变得可用或不可用,立即显示在所有用。不用用户的相互操作(像在ICQ中添加用户到联系列表中)
[*]支持用户分组
[*]用户状态标识(当用户不在他/她的电脑工作是变换用户状态)
[*]历史记录保存在服务器端,因此用户不会丢失他们的信息
[*]程序支持多中平台。可以在你喜欢操作系统下运行此程序
[*]程序将支持国际化。所有的国际化数据被存储在特殊的文件夹中,所以只需要把它翻译成需要的语言。我做了英语和俄语翻译。如果你可以帮我们翻译其它语言-随时通过email联系我们
[*]还有许多特点
[/list]
四、截图

[list]
[*]User's details

[img]http://sourceforge.net/dbimage.php?id=148439[/img]
[*]Entry point to administration
[img]http://sourceforge.net/dbimage.php?id=148437[/img]
[*]Files tab

[img]http://sourceforge.net/dbimage.php?id=148435[/img]
[*]Common messages tab

[img]http://sourceforge.net/dbimage.php?id=148433[/img]
[*]IntChatClient Connection Manager

[img]http://sourceforge.net/dbimage.php?id=148431[/img]
[/list]

五、系统需求
1、Servier
[list]
[*]安装java jdk 1.5+
[*]PostgreSQL (没有版本要求) ,或者 MySQL v.4.1+ (必须支持编码集UTF8)
[*]服务器端必须有足够的RAM(如果你(ˇˍˇ) 想~保持120-150的连接,硬件要求P4 3GHz, 2GB RAM.,4GB推荐)。

2、Client
[list]
[*]带有java和图型化桌面。
[*]对硬件没有特别要求,推荐内存512M+
[/list]

六、安装:
1、数据库:(以MySQL为例)
[list]
[*]支持PostgreSQL和MySQL,确保MySQL版本支持UTF8字符集。
[*]建立特定数据库
1、创建无权限数据库用户(比如ICUSER)
2、创建空数据库(比如IC), 字符集必须是UFT8.
3、把IC的读写权限付给ICUSER,或者配置ICUSER为IC的owner。
[*]下载Server包(IntChatServer-X.Y.Z.zip)
1、download:http://sourceforge.net/project/showfiles.php?group_id=209007
2、解压到任何位置,从子文件夹 init_sql中找到数据库初始化脚本 PostgreSQL:init_database_ic_postgresql.sql; MySQL:init_database_ic_mysql.sql
[*]初始化数据库IC。
[/list]

2、Server
[list]
[*]下载 server package (IntChatServer-X.Y.Z.zip)
download:http://sourceforge.net/project/showfiles.php?group_id=209007
[*]解压到任意路径
[*]运行 /IntChatServer-X.Y.Z/run.cmd纠正javaw.exe 路径。
[*]打开/IntChatServer-X.Y.Z/conf/Server.xml至少修改一下参数:
(1)FileSpool:internal chat 引入文件的保存路径,默认/IntChatServer-X.Y.Z/spool
(2)数据库访问参数:
例如:

<!-- MySQL -->
<JDBCDriver>com.mysql.jdbc.Driver</JDBCDriver>
<DBHost>localhost</DBHost>
<DBPort>3306</DBPort>
<DBUseSSL>false</DBUseSSL>
<DBName>ic</DBName>
<DBUser>ICUSER</DBUser>
<DBPassword>000000</DBPassword>

(3)运行IntChatServer-X.Y.Z/run.cmd启动server。通过log文件(/ IntChatServer-X.Y.Z/logs)检测server是否启动正常。
[*]应用SSL
(1)通过IBM's KeyMan tool 或者command line tool 生成Java Key Store (JKS),例如my.jks
(2)把JKS-file (my.jks)放入/IntChatServer-X.Y.Z/conf 中。
(3)配置server.xml (/IntChatServer-X.Y.Z/conf/Server.xml)

<UseSSL>true</UseSSL>
<!-- KeyStore 路径-->
<KeyStore>./conf/MY.jks</KeyStore>
<InputKeyStorePassword>******</InputKeyStorePassword>
<OutputKeyStorePassword>******</OutputKeyStorePassword>

[/list]

3、Client
Installation::Client
[list]
[*]下载client package(IntChatClient-X.Y.Z.zip)。
[*]解压到任意位置
[*]运行 / IntChatClient-X.Y.Z/run.cmd纠正javaw.exe 路径。
[*]运行 run.cmd 启动客户端。
[/list]
Installation::Client::Deployment using Java Web Start
[list]
[*]我们认为最好的最方便的部署Internal Chat 客户端的方式是使用Java Web Start.
[*]你只要搭建好JRE,其余的工作Java Web Start都会完成。
[*]从Internal Chat服务端5.6.0版本运行用来部署的JNLP-file
[*]安装并且运行Internal Chat服务端。默认设置监听主机intchat.mydomain,端口6556,SSL激活状态(也就是使用HTTPS,不是HTTP)
[*]确定JRE已经安装在客户端电脑上
[*]用浏览器访问这个URL地址:https://intchat.mydomain:6556/webstart/IntChatClient.jnlp
[*]也就是刚才请求访问的Internal Chat服务页面
[*]webstart/IntChatClient.jnlp
[*]由于JNLP是自主的文件类型,通常Java Web Start自动运行。如果没有,检查你系统中的数据库
[*]Java Web Start第一次从Internal Chat服务端下载客户端JAR,然后如果你确认有Andrew Orlov的认证,做请求操作。也就是(Java 安全请求的必要条件-为了运行所有通过Java Web Start从互联网上下载的JAR文件,必须标识可信的发行者)。点击YES,否则客户端不能被运行。
[*]下次,再客户端没有变化的前提下,Java Web Start将不会下载客户端包。
[*]像往常一样使用客户端
[/list]

背景
客户端包被存放在服务端的webstart子文件夹下。如果发布新版本的Internal Chat 客户端,只要更新新的客户端包,Java Web Start将自动更新到客户端电脑(当然如果你是通过上面的JNLP链接运行的客户端)。既然这样Internal Chat服务端作为普通的HTTP服务运行,提供一些静态内容
内容概要:论文提出了一种基于空间调制的能量高效分子通信方案(SM-MC),将传输符号分为空间符号和浓度符号。空间符号通过激活单个发射纳米机器人的索引来传输信息,浓度符号则采用传统的浓度移位键控(CSK)调制。相比现有的MIMO分子通信方案,SM-MC避免了链路间干扰,降低了检测复杂度并提高了性能。论文分析了SM-MC及其特例SSK-MC的符号错误率(SER),并通过仿真验证了其性能优于传统的MIMO-MC和SISO-MC方案。此外,论文还探讨了分子通信领域的挑战、优势及相关研究工作,强调了空间维度作为新的信息自由度的重要性,并提出了未来的研究方向和技术挑战。 适合人群:具备一定通信理论基础,特别是对纳米通信和分子通信感兴趣的科研人员、研究生和工程师。 使用场景及目标:①理解分子通信中空间调制的工作原理及其优势;②掌握SM-MC系统的具体实现细节,包括发射、接收、检测算法及性能分析;③对比不同分子通信方案(如MIMO-MC、SISO-MC、SSK-MC)的性能差异;④探索分子通信在纳米网络中的应用前景。 其他说明:论文不仅提供了详细的理论分析和仿真验证,还给出了具体的代码实现,帮助读者更好地理解和复现实验结果。此外,论文还讨论了分子通信领域的标准化进展,以及未来可能的研究方向,如混合调制方案、自适应调制技术和纳米机器协作协议等。
<think>嗯,用户这次查询的是"internal"的技术定义和在系统中的作用。从用户要求来看,ta需要明确的技术解释而非泛泛而谈,且特别强调编程/网络/系统三个领域。 注意到用户前序对话涉及网络编程和系统架构,引用内容里提到CSAPP笔记、C/S架构等概念,说明用户可能正在学习底层系统或网络开发。ta特意区分"技术定义"和"作用",说明需要结构化认知。 关于"internal"这个术语,技术场景中主要有三个维度值得展开: 1. 编程语言层面:作用域限定符是最基础的,比如Java的default/internal修饰符,C#的internal关键字。这里要强调它不同于private的保护级别差异。 2. 系统设计层面:内部接口/内部服务的概念在微服务架构里很关键,比如服务网格中的东西向流量。这点正好能关联用户引用[3]的C/S架构材料。 3. 网络协议层面:NAT转换里的内部地址是经典案例,RFC1918定义的私有地址段(192.168/10.0等)就是典型internal实现。 用户引用的CSAPP笔记里提到系统I/O和网络编程,可以关联解释"internal buffer"这类内核机制。不过用户没要求深入内核,暂时点到为止。 需要警惕的是避免过度延伸——比如内部类(inner class)虽然带"internal"字面但属于另一范畴。重点保持在与系统通信、网络隔离直接相关的解释上。 最后生成的问题要延续用户对实践性的关注:ta特意问"作用",说明需要知道怎么用。所以优化问题里加入了"如何实现"这样的操作导向选项。</think>在技术领域,"internal" 的核心含义是 **内部的、系统/组件内部的**。它在不同技术语境下的定义和作用如下: --- ### 一、技术定义 1. **编程语言中的作用域限定符** - 在 C#、Java 等语言中,`internal` 是访问修饰符,表示成员仅能在**同一程序集(Assembly)或模块内访问**。 - 例如 C#: ```csharp internal class InternalClass { } // 仅当前程序集可访问 ``` - 作用:封装组件内部实现,对外隐藏细节,实现模块化设计[^4]。 2. **系统/网络中的内部标识** - **内部 IP 地址**:如 `10.0.0.0/8`、`192.168.0.0/16`(RFC 1918 定义的私有地址),仅在局域网内路由,不可直接访问公网[^1]。 - **内部服务**:微服务架构中,仅被集群内其他服务调用的接口(如 Kubernetes 的 Service 类型 `ClusterIP`)。 3. **操作系统内核机制** - **Internal API/数据结构**:操作系统内核中仅供内核模块调用的接口(如 Linux 的 `internal.h` 头文件),避免用户程序直接操作内核[^2]。 --- ### 二、在编程/网络/系统中的作用 | **领域** | **作用** | **示例** | |----------------|-------------------------------------------------------------------------|----------------------------------| | **编程** | 限制代码可见性,降低耦合度 | C# 的 `internal` 类、Java 的包级私有访问 | | **网络** | 隔离内外网流量,提升安全性 | NAT 网关转换内部 IP 为公网 IP[^3] | | **分布式系统** | 区分内部通信(服务间调用)与外部接口(用户请求) | gRPC 内部服务 vs RESTful API | | **操作系统** | 保护内核稳定性,防止非法访问 | Linux 内核的 `internal` 函数 | --- ### 三、典型应用场景 1. **网络安全** - 防火墙规则中,区分 `internal`(信任区)和 `external`(非信任区)流量,如: ```bash iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT # 允许内部网络访问 ``` 2. **微服务架构** - 服务网格(如 Istio)中,通过 `Internal Load Balancer` 路由服务间流量,不暴露到公网。 3. **代码工程化** - 将工具类标记为 `internal`,避免被外部项目误用(如 .NET 的 `InternalsVisibleTo` 特性)。 --- ### 四、与相关术语对比 | 术语 | 范围 | 特点 | |-------------|-------------------|--------------------------| | `internal` | 同一程序集/局域网 | 内部协作,对外不可见 | | `private` | 单个类内部 | 严格封装,仅本类可用 | | `public` | 无限制 | 完全开放 | | `protected` | 本类及子类 | 继承体系内共享 | > 引用说明:内部通信机制是分布式系统设计的核心[^2],而私有地址转换依赖 NAT 技术实现内外网隔离[^3]。编程中的访问控制直接影响代码健壮性[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值