我希望用Java实现一个简单的XMPP服务器.
我需要的是一个可以解析和理解来自客户端的xmpp请求的库.我看过Smack(下面提到)和JSO.Smack似乎只是客户端,所以虽然它可能有助于解析数据包,但它不知道如何响应客户端.JSO是否保持它看起来很旧.唯一有希望的途径是拆分Openfire,这是一个完整的商业(OSS)XMPP服务器.
我只是希望Netty或Mina上面有几行代码,所以我可以开始处理一些消息.
乔 -
那么我想要做的事情的答案有点长 - 我会尽量保持简短.
有两件事,只是松散相关:
1)我想编写一个XMPP服务器,因为我想为两个客户端编写自定义协议进行通信.基本上我在想一个联网的iPhone应用程序 - 但我不想依赖低级二进制协议,因为使用类似XMPP的东西意味着应用程序可以从基于本地wifi的应用程序快速"成长"到基于互联网的应用程序...
交换的消息应该是相对较低的延迟,所以严格来说二进制协议是最好的,但我觉得如果XMPP没有引入太多开销以便我可以使用它然后获得它的可扩展性的好处,那么值得探索.和以后的灵活性.
2)我为兵马俑工作 - 所以我有这种疯狂的想法聚集一切.我一开始考虑编写一些自定义服务器代码,我想我想将它集群化.Terracotta使得Java POJO的扩展变得微不足道,所以我的想法是构建一个超级简单的XMPP服务器作为Terracotta的演示应用程序.基本上每个用户都将通过TCP连接连接到服务器,这将用户注册到散列映射.每个用户都有一个LinkedBlockingQueue,其中一个侦听器线程从队列中获取消息.然后,任何想要向任何其他用户(例如任何旧的聊天应用程序)发送消息的连接用户只需通过该连接向该用户发出XMPP消息(照常).服务器选择它,在地图中查找相应的用户对象并将消息放入队列.由于队列是群集的,
所以 - 我不害怕总结.但这就是我想要做的.我想我可以为Openfire编写一个插件来完成#1,但我认为它需要处理很多管道,因此很难做到#2(特别是因为我希望有一小部分代码能够适应简单的10-20kb Maven项目).
Java进程控制非常糟糕 - 主要是由于Java VM/JDK类(例如java.lang.Process)的支持不足.
我想知道,有没有可靠的开源库.
要求是:
我正在使用Spring 5 WebClient.我想知道是否可以将其配置为使用HTTP代理,或者是否有一种方法可以更改它的默认配置.
与此相关的问题在这里,有没有使用流星,这并不表明在客户中间结果(导致页面跳转左右)实现分页的习惯的方法.
我从排行榜示例中衍生出一个应用程序,实质上是在我使用的客户端上:
Template.scores.created = ->
Meteor.autosubscribe ->
Meteor.subscribe 'players', Session.get('page_size'), Session.get('current_page'), sortOrder()
Run Code Online (Sandbox Code Playgroud)
和服务器
Meteor.publish 'players', (page_size, current_page, sort) ->
Players.find({}, sort: sort, skip: (current_page-1)*page_size, limit: page_size)
Run Code Online (Sandbox Code Playgroud)
由于meteor订阅新数据然后删除旧数据的方式,所有新项目在删除旧项目之前会短暂显示,这会导致我想要摆脱的闪烁效果.
我正在研究基于REST的API,并且在确定表示父/子关系的规范方法时遇到一些麻烦.(我在CXF中编写bean并使用JAX-RS和JAXB.我从CXF提供的基本示例开始)
我的问题是让你说你有一个Foo和一个酒吧.与Foo和Bar有一个1-N的关系,即1 Foo有很多Bars.我的问题是,找出Bars a Foo有什么规范方法是什么?访问Foo拥有的Bar资源的规范方法是什么?
我已经想到了,例如我可能会将Foos列在:
并在以下单一操作:
PUT/UPDATE/DELETE http:// xxx/fooservice/foo / {fooid}
但是我如何列出Foo 121的条形码?我如何访问它们?我注意到,默认的JAXB marshaller似乎不输出集合只是bean的属性,所以如果Foo是:
Foo - String id - String name - Collection bars
JAXB输出如下:
<foo> <id> 123>/id> <name> foo name </ name> </ foo> < - 注意没有bars属性
这是有问题的,因为没有办法让客户合理地预期知道Foo有酒吧,除非它"只知道"(这对我来说似乎很糟糕).因此,虽然我可以设想使用以下方法获取条形列表:
获取http:// xxx/fooservice/foo/121/bars
如果实体的输出没有说明任何内容,客户如何知道Foo有Bars?现在假设客户端确实得到了列表,那么实体操作似乎是这样的:
GET/DELETE/UPDATE http:// xxx/fooservice/foo/121/bar/435
这将访问Foo 121拥有的Bar 435.