标签: ejabberd

作为回合制MMORPG的核心技术,ejabberd是一个不错的选择吗?

我想我的项目的技术堆栈,我想到使用ejabberd.该项目将看起来像经典的多用户地下城RPG,玩家将从一个地方移动到另一个地方(地点看起来与聊天室完全一样),他们也会在回合制模式下互相想象彼此以及AI .

我从未使用过ejabberd,但我在使用erlang编写服务器应用程序方面有一些经验.

对于这种游戏,ejabberd是否有点矫枉过正?它有很多我不需要的功能.然而,它对于erlang开发者来说是众所周知的,并且也非常稳定和成熟.ejabberd是否值得将它用作我的在线游戏的传输层,或者我应该更好地发明我自己的轮子,一些小而简单的东西?

erlang ejabberd

11
推荐指数
1
解决办法
1862
查看次数

从PHP创建ejabberd用户

我需要从PHP脚本创建一个ejabberd用户.我还需要能够将新用户添加到预定义的共享名单中.

我应该打电话ejabberdctl使用exec()还是有更好的方式?

php xmpp ejabberd

10
推荐指数
3
解决办法
1万
查看次数

当客户端连接突然丢失时,xmpp消息将丢失

我正在使用ejabberd服务器和ios xmppframework.有两个客户,A和B.

  1. 当A和B在线时,A可以成功向B发送消息.
  2. 如果B离线,B可以在B再次联机时收到消息.
  3. 但是当B突然/意外地丢失连接时,例如手动关闭wi-fi,A发送的消息就会丢失.B永远不会收到此消息.

我想原因是B突然失去连接,服务器仍然认为B在线.因此,离线消息在这种情况下可以正常工作.

所以我的问题是如何确保B发送的消息将被B接收?确保没有消息丢失.

message xmpp ejabberd xmppframework

10
推荐指数
2
解决办法
4201
查看次数

OS X ejabberd,XMPPFramework的新用户注册

我是ejabberd的新手.我想通过我的iOS应用程序在服务器上添加新用户. 我尝试了许多从Google中找到的代码,但没有人可以解决我的问题.

我将模块设置为http:// localhost:5280/admin/server/localhost/node/ejabberd @ localhost/modules /

在此输入图像描述 要启用mod_register也可以ejabberd.ymletc/ejabberd文件夹更改文件.

在此输入图像描述

以及我在ejabberd @ localhost的收听端口

在此输入图像描述

我使用下面的代码注册用户.

NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"jabber:iq:register"];
        [query addChild:[NSXMLElement elementWithName:@"username" stringValue:@"syam"]];
        [query addChild:[NSXMLElement elementWithName:@"password" stringValue:@"Vrin@123"]];
        NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"];
        [iq addAttributeWithName:@"type" stringValue:@"set"];
        [iq addAttributeWithName:@"id" stringValue:@"reg2"];
        [iq addChild:query];
        [APP_DELEGATE.xmppStream sendElement:iq];

        [APP_DELEGATE.xmppStream setHostName:@"0.0.0.0"];
        [APP_DELEGATE.xmppStream setHostPort:5222];
        NSError *error;
        if (![APP_DELEGATE.xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error]) {
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error connecting"
                                                                message:@"See console for error details."
                                                               delegate:nil
                                                      cancelButtonTitle:@"Ok"
                                                      otherButtonTitles:nil];
            [alertView show]; …
Run Code Online (Sandbox Code Playgroud)

macos xmpp ejabberd ios xmppframework

10
推荐指数
1
解决办法
489
查看次数

Smack"必须有本地(用户)JID设置"错误

无法理解为什么会出现此错误并且应用程序崩溃.

低于错误:

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.studyboard/com.studyboard.ChatMessageActivity}: java.lang.IllegalArgumentException: Must have a local (user) JID set. Either you didn't configure one or you where not connected at least once
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2493)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2555)
       at android.app.ActivityThread.access$800(ActivityThread.java:176)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1437)
       at android.os.Handler.dispatchMessage(Handler.java:111)
       at android.os.Looper.loop(Looper.java:194)
       at android.app.ActivityThread.main(ActivityThread.java:5576)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751)
Caused by java.lang.IllegalArgumentException: Must have a local (user) JID set. Either you didn't configure one or you where not connected at least once
       at org.jivesoftware.smack.filter.IQReplyFilter.<init>(IQReplyFilter.java:94)
       at org.jivesoftware.smack.AbstractXMPPConnection.createPacketCollectorAndSend(AbstractXMPPConnection.java:690) …
Run Code Online (Sandbox Code Playgroud)

android ejabberd smack

10
推荐指数
1
解决办法
1826
查看次数

使用MySQL和ejabberd进行高效的外部排班

请注意,使用Eugen的观点,下面的解决方案就在下面!

我正在为PHP/MySQL用户驱动的网站编写聊天模块,允许两个用户结交朋友,并为聊天系统选择了eJabberd.

我已经使用PHP守护程序成功设置了外部身份验证,现在我已成功通过手动使用mod_roster_odbc和填充MySQL rosterusers表来获得与eJabberd的友谊.经过大量的挖掘,我设法发现这个特别的评论非常有助于知道每列的设置,以便在聊天模块的朋友列表中表示友谊.

我当前处理友谊的方法是在rosterusers表中插入两行:

# Relationship user1 => user2
INSERT INTO rosterusers (username, jid, subscription, ask, server, type)
VALUES ('user1', 'user2@myserver.org', 'B', 'N', 'B', 'item');

# Relationship user2 => user1
INSERT INTO rosterusers (username, jid, subscription, ask, server, type)
VALUES ('user2', 'user1@myserver.org', 'B', 'N', 'B', 'item');
Run Code Online (Sandbox Code Playgroud)

我对此并不满意,因为互惠友谊需要两排.

据我所知,XMPP标准允许用户之间的单链路和双链路.正如我可以通过我的问题的性质推断出,我自己的应用程序的朋友系统使用一行来表示友谊.

我的主要问题:

  1. 是否有可能将这种友谊合并到一排?我尝试过这些非官方文档的一些组合,但没有成功.我正在使用Pidgin客户端连接到我的XMPP服务器进行测试.
  2. 保持两个数据库(朋友和XMPP名单)同步的最佳方法是什么?我认为MySQL TRIGGER可能是目前最干净的选择.

如果没有,那么我的另一个选择是更改rosterusers表并获取它以引用我自己的应用程序的朋友行,以便它的功能类似于跨数据库外键.

解决方案代码

我创建了一个欧根建议的视图.代码不是最优雅的,但我已经测试了它,它适用于MySQL 5.5上的eJabberd 2.1.

我的确切设置使用两个数据库,因此我使用显式引用我的主应用程序的数据库main_database.table_name.

代码是两个查询的联合 - 第一个使用User,Friend,然后第二个插入Friend,User.我正在使用UNION ALL速度,并让"重复"通过. …

mysql erlang xmpp ejabberd

9
推荐指数
1
解决办法
2616
查看次数

如何保护密码不被客户端读取?

我需要将服务器上的用户名和密码传递给我的网络聊天客户端javascript函数.当我通过我的PHP代码在javascript函数中发送用户名密码时,它对源中的用户来说是可读的,这是有害的.

请分享您的解决方案.

我从客户端的服务器A获取用户名密码,然后将这些凭据提交给javascript函数,然后连接到另一台服务器B.它就像facebook和gmail聊天工作,但是他们如何将用户凭据传递给他们的javascript网络上的任何地方都没有提到连接到聊天服务器的客户端,希望这更好地解释.

javascript php xmpp ejabberd

8
推荐指数
3
解决办法
2006
查看次数

XMPP服务器名称和XMPP服务名称之间的区别?

在Smack API中,有一个用于连接的配置类,在此页面中进行了描述

ConnectionConfiguration

我对服务名称和服务器名称之间的区别感到困惑.

假设我有一台名为"mybox.mydomain.com"的计算机,我在ejabberd上配置了一个名为"myhost"的主机(使用{hosts, ["myhost"]}.ejabbed.cfg中的行),

在这种情况下,主机名,服务器名称和服务名称是什么?

xmpp openfire ejabberd smack

8
推荐指数
1
解决办法
1万
查看次数

BOSH模块未启动:Ejabberd/Strophe设置问题

我试图使用内部Ejabberd网络服务器在Ubuntu 12(Linode最新版本)上使用Ejabberd设置Strophe来进行聊天.

测试网址(http-bindadmin)都有效.
JWChat有效.
Strophe抛出一个错误:

In Strophe:
RECV: <body xmlns='http://jabber.org/protocol/httpbind' type='terminate' condition='internal-server-error'>BOSH module not started</body>

In ejabberd.log:  
E(<0.468.0>:ejabberd_http_bind:1236) : 
You are trying to use BOSH (HTTP Bind) in host "admin", but the module mod_http_bind is not started in that host. 
Configure your BOSH client to connect to the correct host, or add your desired host`
Run Code Online (Sandbox Code Playgroud)

安装很简单(虽然花了很长时间才能解决这个问题):

  1. 使用sudo apt-get安装
  2. 在sudo下运行
  3. 使用内部服务器,以避免搞乱代理或设置PunJab.
  4. 在ejabberd.cfg做了改动.

对ejabberd.cfg的更改:

%% In listening ports, amended the following lines:  
{ request_handlers,  [   
   {["pub"], mod_http_fileserver},   
   {["http-bind"], …
Run Code Online (Sandbox Code Playgroud)

xmpp ejabberd strophe

8
推荐指数
1
解决办法
6200
查看次数

在多用户聊天中向离线用户发送消息(ejabberd)

实际上我们正在使用ejabberd服务器作为我们客户的聊天应用程序之一.除了群聊之外,一切都很顺利.

我们正在使用MUC进行群聊,但是当用户离线时,它不会向会员发送消息.是否有任何替代插件或我们可以使其工作的东西?

或者,任何人都可以建议如何从群聊历史记录中接收该用户的离线消息.

提前致谢

chat xmpp ejabberd

8
推荐指数
1
解决办法
8503
查看次数

标签 统计

ejabberd ×10

xmpp ×8

erlang ×2

php ×2

smack ×2

xmppframework ×2

android ×1

chat ×1

ios ×1

javascript ×1

macos ×1

message ×1

mysql ×1

openfire ×1

strophe ×1