導航:首頁 > 配伺服器 > im伺服器如何編寫

im伺服器如何編寫

發布時間:2022-07-12 04:08:54

1. 自己開發IM難度大嗎容易不

如果說是一個簡單的demo,或者比較粗糙,使用人數比較少,那還是比較簡單的。但是要做的比較精緻,並且使用人數多的情況下,還要穩定的運行,使用很流暢,那就很難了。並且還需要一個開發團隊實時的去運維。

2. C#寫了一個IM客戶端和伺服器,現在想實現客戶端通過代理伺服器連接伺服器端

ConnectionConfiguration這個類初始化的時候三個參數分辨為第一個:伺服器地址 第二個:對應埠號 第三個:代理伺服器地址(可不寫)。

3. C#服務端,Android客戶端 開發IM,服務端怎麼弄,有沒有開源的框架

C#開源項目(國外的還是很多) 一、Ajax框架 Ajax.NET Professional
(AjaxPro)是最先把AJAX技術在微軟.NET環境下的實現的AJAX框架之一。它在客戶端腳本之上創建代理類來調用伺服器端的方法。
MagicAjax.NET是一款在ASP.NET下創建Web頁面提供AJAX技術的框架。它使開發人員很容易把AJAX整合到他們的頁面而不需要替換ASP.NET控制項或自己寫javascript腳本代碼。
Anthem.NET是為ASP.NET開發環境提供的開源AJAX工具包,它可以運行於ASP.NET 1.1和2.0。

二、工作流(workflow)
Workflow.Net是使用微軟.Net技術基於wmfc標準的創建工作流引擎。
NetBPM是JBpm移植到.net平台下的一款開源工作流軟體。NetBpm可以很容易和.Net應用程序集成在一起,可以創建,執行和管理工作流程序。 Bpm
Tool支持將業務模型轉換成軟體模型。業務開發人員可以使用模型驅動的方法設計,實現,執行和跟蹤業務流程。因此開發人員能夠更容易的關注業務邏輯的變化。

其實微軟自己的WPF做WorkFlow也很厲害。

三、文本編輯 FCKeditor是一款功能強大的開源在線文本編輯器(DHTML
editor),它使你在web上可以使用類似微軟Word 的桌面文本編輯器的許多強大功能。它是輕量級且不必在客戶端進行任何方式的安裝。 FreeTextBox
是一個基於 Internet Explorer 中 MSHTML 技術的 ASP.NET 開源伺服器控制項。這是一款優秀的自由軟體(Free
Software),我們可以輕松地將其嵌入到 Web Forms 中實現 HTML 內容的在線編輯,在新聞發布、博客寫作、論壇社區等多種 Web
系統中都會有用途。 VietPad是一個功能完整的跨平台的Java/.NET的Vietnamese
Unicode開源文本編輯器。支持打開,編輯,列印,轉換,排序,和保存基於文本的Unicode格式的Vietnamese文件。
NetSpell是一款.NET框架下的開源拼寫檢查引擎。 PPC_edit是一款應用在Pocket PC上的開源文本編輯器,它支持TXT, RTF, HTML,
WordML, DocBook 和 ZIP格式的文件,屏幕上會顯示國際標準的軟鍵盤。

四、博客(Blog)
NovaShare是一款Blog引擎,它使你創建基於互動式的web的新聞和論壇網站,很像WonkoSlice或Slashdot。管理員可以發布文章和發起投票,瀏覽者可以創建用戶帳號,發表議論等等。
dasBlog是從BlogX 網上日誌引擎發展而來。像Trackback ,Pingback
一樣增加許多附加的特徵,有完整的Blogger/MovableType
API支持,API注釋,完整的Radio-style模板定製,支持Mail-To-Weblog/POP3的附件和內嵌圖片,基於WEB的
DHTML,OPML,配置的編輯器。 DotText是一個被使用了數百個blogs的強勁的blog引擎。這是一個N-tiered應用的例子。
tBlogger是一個C#開發的完整的blog網站程序,使用XML配置。

Blog現在可以使用MVC的其他開源項目來構建,這些項目在codeplex上有很多,其中微軟自己的就有OXite。

五、系統構建

.NETZ是一款免費開源工具,它可以壓縮和打包微軟 .NET 框架可執行文件(EXE,
DLL)以使他們更小。更小的可執行文件佔用的磁碟空間較少且因為讀取文件時對磁碟的訪問較少而使讀取數度更快。它和PE(portable
executable)打包工具不一樣,.NETZ是使用 C# 編寫的存粹的 .NET 解決方案。.NETZ可以用來打包幾乎每一種 .NET
支持的語言編寫的程序。.NETZ支持 .NET EXE 和 非共享(non-shared)的 DLL
文件。壓縮過的程序能以相同的方式解壓縮這些對最終用戶是透明的。 NAntContrib為NAnt提供定製任務的工具。
Prebuild是XML驅動的一款跨平台pre-build工具,使開發人員很容易就可以為IDE和.NET開發工具生成項目或構建文件。它支持 Visual
Studio .NET 2002, 2003, 2005, SharpDevelop, MonoDevelop 和 NAnt。
BusyBeeBuilder是.NET平台下功能強大,易於使用,可擴展的開源構建自動操作工具。 Draco.NET 是 Windows
服務應用程序。它的設計使其容易持續的集成新特性。Draco.NET監視你的源代碼儲存庫。當探測到你的項目有變化時自動重新創建項目並把包含變化列表的創建結果發送到你的Email。
Build Studio為軟體的自動構件處理提供了一套完整的解決方案。 CruiseControl.NET是.NET平台下的一款整合伺服器。
NAnt類似Apache項目下的Ant,是.Net下的開源構建工具。適用在自動編譯.NET應用的場合,如.NET項目的每日構建(nightly
build)。

說老實話,我並不認為系統構建工具的作用真的有那麼強大,如果你真的計劃做一個很大的項目,且持續開發時間很長,那麼你可以使用上面的系統構建工具。

五、圖表製作

ZedGraph是C#編寫的.NET類庫,提供了用戶控制項和web控制項。它可以創建2D的線性圖、條形圖和餅圖。它功能完整且有詳細的功能自定義,不過
使用默認的選項就足夠好用了。一款類似 PieChart, StackBar, LineChart的C#開源圖表組件。
NPlot是一款.NET下的開源圖表類庫.它值得稱道的地方是優雅且靈活的API設計.NPlot包含了Windows Form控制項,
ASP.NET控制項和一個創建Bitmap圖片的類。還有一個可用的GTK#控制項。 XSCharting是C#開發的圖表組件,提供了多種多樣的圖表選項。
DaveChart是一個免費的DotNet類庫。 NChart 提供了很多值得應用在商業,教育等多個領域的2 D圖表。

微軟自己已經提供了一個chat繪制控制項,也就是原來的nat,如果那個可以滿足你的要求,那麼完全沒有必要使用上面的。但是如果你需要研究畫圖,作自己定義的chat,那麼這些開源的項目將對你有很大的幫助。

六、聊天系統

Dot Net Chat
server是基於DotNet框架開發的聊天伺服器和客戶端項目。說老實話,我對這個很感興趣,有時間,要瞧瞧它的代碼是咋實現的。

七、內容管理系統(CMS)

Ludico是C#編寫的居於ASP.NET
2.0的Portal/CMS系統。它的模塊化設計是你可以按照你希望的使用或開發網站功能。它裡面有高級的用戶管理,一個所見即所的(WYSIWYG)的編輯器等。
mojoPortal是一款C#開發的面相對象網站框架,它可以運行於Windows的ASP.NET 和GNU/linux 或Mac OS X的Mono的平台上。
Cuyahoga是C#開發的靈活的CMS / Portal 解決方案。它可以運行於Microsoft .NET 和Mono 平台,支持SQL Server,
PostgreSQL或MySQL作為底層資料庫。 Umbraco是一款在.net平台下C#開發的開源內容管理系統,該系統效率,靈活,用戶界面都不錯。 Kodai
CMS是.NET平台下的一款功能齊全的內容管理系統。 Rainbow項目是一款使用Microsoft』』s
ASP.NET和C#技術開發的有豐富功能的開源內容管理系統。 NkCMS是使用ASP.net和Sql server 2000開發的內容管理系統。
Amplefile是一款內容管理系統,是.Net環境下的windows應用程序,使用了.Net remoting.
Go.Kryo是一個用ASP.NET(C#).NET 實現的簡單的內容管理系統,後台資料庫使用Microsoft SQL Server 。 ndCMS是
ASP.net
(C#)下的一個內容管理系統。它提供了用戶管理,文件管理,一個WYSIWYG編輯器,模板管理,拼寫檢查和內置的http壓縮。ndCMS的目標是提供一個簡單而快速的方式部署.Net站點以節省你的時間和金錢。

這些開源的CMS我試用了幾個,說真的,拿來研究可以,要真的實施,估計很難。

九、論壇系統

YetAnotherForum可以作為ASP.NET開發的網站的論壇或是留言板。它使用MSSQL作為底層資料庫。

十、安裝製作

izfree是一套套免費的工具用於幫助創建使用Microsoft」』』s Windows
Installer 技術的安裝程序。使用izfree你可以為你的應用程序製作強勁的安裝程序。

Windows Installer XML
(WiX)可以重XML源文件創建Windows程序安裝包的工具集。它支持命令行方式,開發人員可以把結合它來創建MSI和MSM安裝包一個可以和商業軟體安裝產品相比的開源打包工具。

一般的需求試用VS
自帶的就可以了,更復雜的需要用到InstallShield,這樣看起來開源的就沒啥意義了。

十一、IoC容器

Spring.net是從java的Spring
Framework移植過來的。java的Spring包含了許多功能和特性,在當前的Spring.net都有提供。Spring.net最初發布的版本包含了一個很有特色的IoC容器。

Castle是一組應用開發的工具,內含一個簡單的IoC容器。

StructureMap是.NET環境下的一個輕量級依賴注入工具,StructureMap也是一個靈活的、可擴展的通用「插件」機制的.NE

我用過StrucutureMap,但是給我的感覺是,試用這個似乎沒多發幫助。

十二、網路客戶端

.NET FTP Client是C#編寫的開源類庫。

.NET Telnet是微軟.NET
Framework下的C#開發的開源telnet類庫。它的靈感來至Java Telnet Application。

metro這個項目是C#編寫的類庫,它提供了一套豐富的類使開發IP version 4, TCP,
UDP and ICMP等工作更容易。它包含了有很有用的工具如包嗅探器,網路分析工具例如路由跟蹤,ping等。

LJ.NET是LiveJournal站點的客戶端。它為LJ在線日誌服務提供了簡單而強大的用戶介面。

NET VNC Viewer 是一款完全用C#開發的開源VNC觀察器。它兼容Smartphones,
Pocket PC和Windows的電腦(.NET CF or .NET Framework)。它比起其它觀察器的優點是可以在Pocket
PC上全屏顯示而且可以旋轉屏幕。

GVDownloader允許你從google videos, metacafe, putfile,
youtube, break.com 和更多的地方快速下載內含的視頻和多媒體。它的包含一個強勁IE插件和位於你系統托盤的獨立程序。

DotNetOpenMail能夠使你在微軟.net框架開發的asp.net,
WinForm應用程序發送Email。它是C#編寫的開源組件,它不需要使用System.Web.Mail類庫就可以容易的創建帶附件HTML和
Plain-text的Email。程序員不需要知道很多相關的細節就可以使用不同的字元集或不同的MINE編碼來創建
multipart/alternative,multipart/related和multipart/mixed的MIME消息。

DotMSN是一款獨立的開源類庫,它不需要和官方的MSN Messenger交互,因此不必安裝MSN
Messenger就可以使用DotMSN和MSN
Messenger服務通信.DotMSN是C#編寫的,所以.NET環境支持的語言都能夠使用.DotMSN類庫使用簡單而且實現方便。它靈活,堅固,
輕量級利於整合到任何應用系統.使用DotMSN的應用系統能實現從創建消息機器人到自定義客戶端等各種不同的功能.如果你的應用程序需要和
Messenger服務通信,DotMSN是一個不錯的工具.

SharpSSH使用C#實現了SSH2協議,它支持SSH, SCP 和 SFTP.

OpenPOP.NET一組和POP Servers通信的.NET類庫。

IceChat是為連接多樣的IRC Servers設計的Internet Relay Chat
Client。

lphant是為edonkey/emule開發的開源客戶端程序。

.NET FTP Client C#開發的類庫。

OpenSmtp.net 是 C# 開發的開源SMTP組件。它不依賴.NET Framework
的System.Web.Mail 包中的類。允許開發人員使用不同於MS SMTP的SMTP 伺服器且提供了web
service而可以通過HTTP發送email。

這裡面有幾個值得推薦,例如DotMsn這個,在某些場合就很有用處。

4. 用php做在線IM,該如何做,思路是怎樣的

在php下我用socket試驗了下,效率很低, 用ajax的話伺服器很大的壓力。 但是伺服器用linux然後把該關的擴展都關了,也許會好點。 程序方面盡量避免循環甚至嵌套循環。 sql語句多加LIMIT限制條數。

5. 如何搭建一個linux的im追蹤伺服器

1、檢查系統密碼文件首先從明顯的入手,查看一下passwd文件,ls –l /etc/passwd查看文件修改的日期。
awk –F: 『length($2)==0 {print $1}』 /etc/shadow
2、查看一下進程,看看有沒有奇怪的進程
重點查看進程:ps –aef | grep inetd
inetd是UNIX系統的守護進程,正常的inetd的pid都比較靠前,如果你看到輸出了一個類似inetd –s /tmp/.xxx之類的進程,著重看inetd –s後面的內容。在正常情況下,LINUX系統中的inetd服務後面是沒有-s參數的,當然也沒有用inetd去啟動某個文件;而solaris系統中也僅僅是inetd –s,同樣沒有用inetd去啟動某個特定的文件;如果你使用ps命令看到inetd啟動了某個文件,而你自己又沒有用inetd啟動這個文件,那就說明已經有人入侵了你的系統,並且以root許可權起了一個簡單的後門。
輸入ps –aef 查看輸出信息,尤其注意有沒有以./xxx開頭的進程。一旦發現異樣的進程,經檢查為入侵者留下的後門程序,立即運行kill –9 pid 開殺死該進程,然後再運行ps –aef查看該進程是否被殺死;一旦此類進程出現殺死以後又重新啟動的現象,則證明系統被人放置了自動啟動程序的腳本。這個時候要進行仔細查找:find / -name 程序名 –print,假設系統真的被入侵者放置了後門,根據找到的程序所在的目錄,會找到很多有趣的東東,
接下來根據找到入侵者在伺服器上的文件目錄,一步一步進行追蹤。
3、檢查系統守護進程
檢查/etc/inetd.conf文件,輸入:cat /etc/inetd.conf | grep –v 「^#」,輸出的信息就是你這台機器所開啟的遠程服務。
一般入侵者可以通過直接替換in.xxx程序來創建一個後門,比如用/bin/sh 替換掉in.telnetd,然後重新啟動inetd服務,那麼telnet到伺服器上的所有用戶將不用輸入用戶名和密碼而直接獲得一個rootshell。
4、檢查網路連接和監聽埠
輸入netstat -an,列出本機所有的連接和監聽的埠,查看有沒有非法連接。
輸入netstat –rn,查看本機的路由、網關設置是否正確。
輸入 ifconfig –a,查看網卡設置。
5、檢查系統日誌
命令last | more查看在正常情況下登錄到本機的所有用戶的歷史記錄。但last命令依賴於syslog進程,這已經成為入侵者攻擊的重要目標。入侵者通常會停止系統的syslog,查看系統syslog進程的情況,判斷syslog上次啟動的時間是否正常,因為syslog是以root身份執行的,如果發現syslog被非法動過,那說明有重大的入侵事件。
在linux下輸入ls –al /var/log
檢查wtmp utmp,包括messgae等文件的完整性和修改時間是否正常,這也是手工擦除入侵痕跡的一種方法。
6、檢查系統中的core文件
通過發送畸形請求來攻擊伺服器的某一服務來入侵系統是一種常規的入侵方法,典型的RPC攻擊就是通過這種方式。這種方式有一定的成功率,也就是說它並不能100%保證成功入侵系統,而且通常會在伺服器相應目錄下產生core文件,全局查找系統中的core文件,輸入find / -name core –exec ls –l {} \; 依據core所在的目錄、查詢core文件來判斷是否有入侵行為。
7、檢查系統文件完整性
檢查文件的完整性有多種方法,通常我們通過輸入ls –l 文件名來查詢和比較文件,這種方法雖然簡單,但還是有一定的實用性。但是如果ls文件都已經被替換了就比較麻煩。在LINUX下可以用rpm –V `rpm –qf 文件名` 來查詢,查詢的結果是否正常來判斷文件是否完整。

6. IM聊天軟體開發

1.什麼是im即時通訊
im是英文 Instant Messaging的縮寫,意思是能夠即時發送和接收消息。說白的im即時通訊就是聊天工具。常見的微信,qq等。
那麼怎麼去開發一個im即時通訊工具呢。
2.即時通訊軟體用到什麼技術?
開發技術通訊軟體需要用到安卓端技術java語言,蘋果端oc語言,電腦端win系統桌面C/C++語言,最後還有管理後台資料庫語言,
後台管理界面java或者php。所以開發一個即時通訊軟體一個人是搞不定的,需要一個團隊。想做這個軟體的人,需要找個專業團隊
其次,即使是團隊,開發出來的質量也不一樣,例如解決漏消息,卡頓,數據並發等很多問題。個人建議可以利用第三方sdk,
因為這些第三方sdk提供了通訊介面,很好避免了這些問題,提升了產品的體驗
3.即時通訊軟體開發怎麼做?
所以如果你需要開發一個即時通訊軟體,可以去購買第三方伺服器介面,這樣再找個外包公司做下界面就行了,這樣群聊,群管理等
體驗就上去了。而且可以做到日活幾萬人都很流暢

7. 最近要用 C# 開發一個IM軟體,有沒有什麼比較好的思路或者要注意什麼,比如協議,界面,伺服器開發等。

IM是一個綜合性的軟體,技術覆蓋面非常多,如果你沒有經驗,要做一個正規的IM軟體,會面臨很多你無法解決的問題。簡單的有資料庫,復雜的則包括有你應該使用什麼樣的通訊協議?怎麼樣實現高性能高穩定性的伺服器,可以連續 15 天程序不死,並且可以同時支持至少數千個的同時訪問並發量,什麼是擁塞控制協議?怎麼樣得到清晰的語音質量,並且能應付復雜的網路抖動等情況?以及怎麼樣實現語音降噪?QOS 是什麼?視頻有哪些格式?等等,太多了,不說了。

如果你以前沒多少經驗的話,建議你使用現成的 SDK,比較好的,有 PRTX SDK ,這樣你不用考慮上面的底層技術,開發很快,如果你是完全自己做界面這些,也只要一個月以內就可以了。你專著於你自己的應用就可以了,可以很快完成一個穩定的即時通訊系統。可以支持C#。

8. 什麼是im伺服器

im伺服器是instant message伺服器的簡寫。
即時通信(instant message,IM)是指能夠即時發送和接收互聯網消息等的業務。即時通信的功能日益豐富,逐漸集成了電子郵件、博客、音樂、電視、游戲和搜索等多種功能。
即時通信已經發展成集交流、資訊、娛樂、搜索、電子商務、辦公協作和企業客戶服務等為一體的綜合化信息平台。微軟、騰訊、AOL、Yahoo等重要即時通信提供商都提供通過手機接入互聯網即時通信的業務,用戶可以通過手機與其他已經安裝了相應客戶端軟體的手機或電腦收發消息。

9. 什麼是IM服務

IM服務就是即時通訊(Instant Messaging)是目前Internet上最為流行的通訊方式,各種各樣的即時通訊軟體也層出不窮;服務提供商也提供了越來越豐富的通訊服務功能。

10. 如何用java開發基於jabber的IM軟體

Jabber對於即時消息是一個開放的、基於XML的數據模型和協議。聯系不斷增加的基於Jabber開放資源和商業產品的數目,這種協議提供了擺脫即時消息伺服器所有權束縛的一種方法。多種多樣的開放資源Java APIs能夠幫助你建立基於Jabber的伺服器並將即時消息整合到你的應用程序中去。在這篇文章中專門闡述了這一點。
即時消息作為個人——個人通迅工具取得了顯著的成功。在有些地方它已經作為在線聯系的首選方法取代了email。現在,開發者正將這一技術應用到應用程序——個人和應用程序——應用程序通迅上。
直到最近,也只有少數服務提供商掌握了這一技術。通常流行的即時消息服務是建立在所有權協議基礎上的通迅孤島。實施面臨一個困難的決策:支持多協議或鎖定到一個單獨的。不管哪種選擇,實現都必須依賴一個屬於即時消息(IM)服務提供商的伺服器。
開放式協議能夠幫助開發者擺脫所有權陷阱。其優勢有多種:開放協議鼓勵競爭實現的發展(一些開放資源)。他們鼓勵廣泛採用一種公共協議,這樣可以阻止通迅孤島和服務供應的孤立主義方法的發展。用多種方法,開放協議使網際網路成為可能。在即時消息領域,開放協議確保封閉系統及協議不會阻礙基於IM伺服器的發展的互操作性。
Jabber是一種針對即時消息和現場服務的開放協議。作為一個公共協議的最主要的侯選者,Jabber有潛力打破所有權在即時消息服務的控制。
這篇文章將解釋如何實踐發送簡單Jabber消息和開發一個簡單的基於開放標准及開放資源APIs和產品的布告伺服器。
為什麼使用Jabber?
Jabber標准和結構幫助創建一個分布式的IM系統,使人聯想到分布在網際網路上的email系統,用戶在本地連接到這些系統。這個方法直接與象AIM(AOL即時信使)、ICQ、MSN(Microsoft網路)及Yahoo這樣的流行服務提供商提供的單一系統結構作對,在那裡一個單獨的中央伺服器或集中伺服器組提供消息服務。Jabber在其他情形也類似於email結構:Jabber使用一個幾乎與基本SMTP(簡單郵件傳輸協議)方案一樣的地址方案確定它的終點(人,機器,軟體)地址。例如,[email protected]是一個有效的Jabber地址,或使用Jabber說法叫JID(Jabber ID)。因為這些原因,基於Jabber的系統衡量起來好於已存在的專有系統。加之,對於專有即時消息服務的網關允許的協議是必需的。
多種多樣的Jabber伺服器,包括我們在這篇文章中使用的其中之一,都是自由可使用的,意思就是說你不再需要依賴一個第三方IM服務提供商(第三方Jabber服務對於那些要求第三方主機服務的來說也是有用的)。
標准化
當討論Jabber標準的益處時,我應該提及IETF IM標準的工作。在寫這篇文章時,其IMPPWG(即時消息和現場協議工作組)已有多個RFC有效,其中最重要的是:
·RFC 2778:現場和即時消息模型
·RFC 2779:即時消息/現場協議要求
IMPPWG已經起草了一個名叫CPIM(公共現場和即時消息)協議的網際網路標准。Jabber協議也是一個草擬的網際網路標准,但不是IMPPWG工作的部份。
Jabber在哪兒適合這一標准工作呢?依照Jabber網站,Jabber是「承諾完全支持任何開放實時消息協議,包括IETF協議」。如果當對於這個IETF協議的支持增長時,Jabber打算將自己定位為IETF協議的領導開放資源的平台。到目前為止,IETF的工作更多地主要集中在收集要求上而不是執行。暫時,Jabber僅是一個帶有重要開放資源支持的開放即時消息和現場服務協議。結果,它成為開放即時消息事實上的標准。
另一個值得密切注意的競爭對手是Sun微系統的Jxta協議,另一個基於XML針對peer-to-peer(P2P)應用程序開發者的協議。各種各樣的Jxta實施在今天已經能夠被提供。但是,由於其起源相對較近,Jxta比起Jabber只有很少的牽引力。
下載並安裝
要開始使用Jabber,你首先需要下載必要的工具:你需要一個Jabber伺服器,一個Jabber客戶端,一個幫助管理和隱藏一些復雜socket處理的API,XML語法分析,消息創建等等。
Jabber伺服器
為了運行Jabber,你選擇的Jabber伺服器不能有問題,自從他們都接受了標准Jabber XML及與終端應用程序通迅以釋放負荷,其也是標准Jabber XML。Jabberd,最初的Jabber伺服器,是開放資源(但不是基於Java),安裝配置簡單並在多數平台上都有效,包括Unix、Linux、Windows和Mac OS X。JabaServer開放資源方案也值得提及,但現在,這些基於Java的方案仍不如Jabberd成熟。同時,JabaServer安裝不怎麼簡單易懂,因為你必須下載、安裝並配置一個第三方資料庫,加上創建必需的資料庫規劃。
對於這篇文章的例子,我選擇Jabberd。當二進制及源下載對於jabberd都有效時,我就不在這兒描述怎樣建立一個源發布。除非你真想自己編譯,可以從jabberd 主頁下載二進制發布。在Windows平台上安裝是相對容易的。發布是一個.exe程序,按照安裝向導一步一步執行。
安裝完成後,你無需配置。在Windows2000,不要求配置。只要雙擊二進製程序就可啟動伺服器。
用戶代理/客戶
我決定使用Exos客戶端,對於這個方案這是另一個開放資源技術。我尤其喜歡Exos的調試標簽,可以允許你正確地查看客戶發送和接收的XML。另外你能夠作為純粹的XML鍵入Jabber消息並將它們發送給伺服器。所有這些都證明用Jabber協議和伺服器測試的有用性。
Exos的安裝簡單易懂。下載Exos 壓縮文件(我在文章中使用的是0.6版本)。將文件直接解壓到你想要安裝客戶端的目錄。在這個版本中,文件是些簡單的二進制文件和一個.dll文件。你可以從 Muse 主頁下載Muse API。
發送你的第一個Jabber消息
要發送一個Jabber即時消息,你必須初始化Muse Jabber API。通過創建一個JabberContext 類的實例來完成,接下來使用內容作為一個參數到Jabber session factory類的createSession()方法:
1 //初始化Jabber context
2 JabberContext jabberContext = new JabberContext("user", "pass", "localhost");
4 //創建一個Jabber session factory的實例
5 Jabber jabber = new Jabber();
6 //創建新會話
7 JabberSession jabberSession = jabber.createSession(jabberContext);
上面的例子在第2行顯示了一個新context的創建。JabberContext存儲了指定的用戶相關信息(用戶名、密碼、用戶地址)以及稍後要使用context建立session時包含的一個唯一的會話標識。為了闡述意圖,我直接使用了username、password和server。
在第5行,一個Jabber session factory被創建,我們在第7行使用它創建了一個新的JabberSession,Muse進入由Jabber伺服器提供的服務的主要介面。伺服器的主要服務是:
·連接服務: 從Jabber伺服器連接和斷開
·用戶服務: 針對用戶鑒定及注冊
·現場服務: 接收從其它用戶/服務來的及你自己廣播的現場信息
·登記表服務: 密友列表或地址薄
·聊天服務: 發送多種類型的消息—組聊、私聊、標題等等
·伺服器服務: 獲得與由這個Jabber伺服器提供的服務相關的信息
·客戶服務: 獲得關於其他用戶的信息,比如用戶登錄的最後時間
現在我們已經有了一個已經初始化的Jabber session,我們能夠用它在我們才創建的JabberSession對象中使用connect()方法去連接到Jabber 伺服器:
8 //連接到伺服器
9 jabberSession.connect("localhost", 5222);
要連接到一個Jabber伺服器,我們指定地址及在指定伺服器上的機器埠號。標准來說,預設Jabber埠是5222。
現在JabberSession已經連接到伺服器,我們能夠在我們的服務中用login()方法登錄:
10 //登錄到Jabber伺服器
11 jabberSession.getUserService().login();
在第11行,我們使用JabberSession獲得一個到UserService的引用,接下來在我們服務中調用login()方法。注意方法自身不指定任何用戶信息。當在上面第7行JabberSession被創建時login()從與JabberSession相關的JabberContext中獲得這些信息。
現在我們已經成功登錄到Jabber伺服器,我們能夠開始發送和接收消息。下面代碼段顯示了如何構造一個簡單的標題風格的消息:
12 //構造測試消息
13 JabberChatMessage msg = new
14 JabberChatMessage(JabberChatMessage.TYPE_HEADLINE);
15 msg.setSubject("Hello world");
16 msg.setBody("Hello world");
17 msg.setTo("user2@localhost");
在第13行,我們創建了一個JabberChatMessage實例。單個參數指定了我們要求的消息類型:TYPE_HEADLINE。JabberChatMessage類的名字容易引起誤解,實際上,它可以用來包含在Jabber協議中定義的消息的任何四種類型—普通、聊天、標題及錯誤。在第15行,setSubject()和setBody()分別指定主題和內容。最後,setTo()在第17行設置消息接收器的JID。
在封裝下,JabberChatMessage將所有這些信息轉換成一個內在的DOM(文檔對象模型)樹,這樣當我們已經准備好發送消息給Jabber伺服器時能夠輕松產生XML。
最後步驟:用sendMessage()方法發送消息:
18 //發送消息
19 jabberSession.sendMessage(msg);
在封裝下
依據上面例子所得的事實,Muse API有效地隱藏了與連接管理和XML語法分析有關的所有細節,因此允許你集中精力在手邊的任務上:創建一個消息服務。然而,理解一些基礎協議交換證明是有用的。讓我們關注一下當我們連接到伺服器時發生的XML交換,登錄,並象上面代碼描述的一樣發送消息。在下面的XML交換中,被客戶接收的消息(我們例子代碼)帶了RECV前綴,送到伺服器的消息帶有SEND前綴:
SEND: <?xml version="1.0" encoding="UTF-8" ?>
<stream:stream to="localhost"
xmlns="jabber:client"
xmlns:stream="http://etherx.jabber.org/streams">
RECV: <stream:stream from="localhost" id="3D160545">
所有的Jabber交換都發生在一個XML流的上下文。在我們客戶與Jabber伺服器之間連接的生命期間,兩個完全的XML文檔在一個時間傳輸一個片段。上面顯示的最初交換允許客戶開始發送XML流文檔到伺服器並且伺服器開始發送XML流文檔到客戶。
下面,一個要求鑒定的信息被發送給伺服器:
SEND: <iq xmlns="jabber:client" type='get' id='id_10028'>
<query xmlns="jabber:iq:auth">
<username>user</username>
</query>
</iq>
RECV: <iq xmlns="jabber:client" type='result' id='id_10028'>
<query xmlns="jabber:iq:auth">
<username>user</username>
<password />
<digest/>
<sequence>482</sequence>
<token>3D15E63A</token>
<resource />
</query>
</iq>
在用戶鑒定程序前述那段顯示了第一次交換。開始,客戶向伺服器詢問哪種鑒定方式對於給定用戶是有效的。伺服器段用下面的鑒定方法回答:
·Plain 文本:<password />標簽
·零知識鑒定:使用<sequence>和<token>標簽
·<digest/>:象plain文本,但密碼是SHA-1 (安全無序運演算法則)-用用戶的plain文本密碼進行編碼
我們實際上使用<digest/>,象下面代碼段描述的一樣:
SEND: <iq xmlns="jabber:client" type='set' id='id_10030'>
<query xmlns="jabber:iq:auth">
<username>user</username>
<hash></hash>
<resource>Home</resource>
</query>
</iq>
RECV: <iq xmlns="jabber:client" type='result' id='id_10030'></iq>
在這一點,用戶連接到伺服器並能夠開始發送和接收消息:
SEND: <message xmlns="jabber:client" type='headline'
id='id_10032' to='user2@localhost'>
<thread xmlns="jabber:client">id_10033</thread>
<subject xmlns="jabber:client">Hello world</subject>
<body xmlns="jabber:client">Hello world</body>
</message>
上面片段顯示了我們發送給接收者user2@localhost的測試標題消息。
你可能已經注意到在前述協議段有一個重復出現元素:ID標簽。因為session能夠由多個非同步會話組成,ID標簽匹配查詢並響應。
接收消息
自從這篇文章的主要方向是向你顯示如何開發一個報警系統,我就很少注意消息接收。然而,為了完整性的利益,我應該討論在Muse API中處理接收消息的一些有用特性。另外,因為報警服務是被登錄到Jabber伺服器的用戶執行的,你能夠適當地期望一些消息接收者試圖與發送者通信。
Muse使用一個listener附在session上以接收進入消息的提示。下面代碼顯示了如何創建一個listener並將其附到session——listener實際上附加到連接上,但自從我們的介面是在session級別並且JabberSession類有一個便利的方法添加一個listener,我們就將其附加到session:
1 jabberSession.addMessageListener(
2 new JabberMessageListener() {
3 public void messageReceived(JabberMessageEvent event) {
4 if (event.getMessageType() == JabberCode.MSG_CHAT ) {
5 JabberChatMessage msg =
6 (JabberChatMessage)event.getMessage();
7 JabberChatMessage reply = new
8 JabberChatMessage(JabberChatMessage.TYPE_HEADLINE);
9 reply.setTo(msg.getFrom());
10 reply.setSubject("Re: "+msg.getSubject());
11 reply.setBody(
12 "I'm just a sender: please send messages to someone else");
13
14 //發送消息
15 jabberSession.sendMessage(reply);
16 }
17 }
18 }
19 );
客戶能夠添加幾個消息listeners,每次一個消息被接收它們都要被調用。典型的,你為要處理的每一個類型的消息添加一個listener。另一個選擇:為同一種消息類型但在那些消息中的每一種不同的行為添加多個listeners。然而另一種選擇將添加一個要處理所有消息類型的listener。選擇依賴於你想完成什麼。
在上面的例子中,一個單獨的listener被附加。Listener必須是實現JabberMessageListener介面的類的一個實例。這個介面要求一個要被執行的單個方法: void messageReceived(JabberMessageEvent)。當一個消息從伺服器被接收時這個方法將被調用。在例子代碼中,messageReceived()方法首先檢查在第4行接收的消息類型。自從Jabber用戶代理使用了MSG_CHAT類型發送消息,就只對這種類型消息才感興趣。在第5行,Jabber消息從JabberMessageEvent 提取。在第9行通過設置收件人接收消息被用來構成一個給消息發送者的回復並且在第10行拷貝接收消息的主題。一個預設錯誤文本被作為消息體在第11行被設置,並且,在第15行,消息使用前面例子同樣的方法利用JabberSession對象的sendMessage()方法傳輸。
試試Jabber
這篇文章提供了一個對於Jabber協議及少量你能夠將這一技術應用到你的應用程序中去的開放資源方案的基本介紹。對這個協議有用的應用程序多種多樣,並不限於傳統P2P感覺的即時消息領域。例如,jogger.jabber.org提供的Jogger,一個允許你通過發送一個消息給Weblog應用程序(blog)就能更新個人網路雜志的有趣服務。Jabber在用戶服務應用程序及其它結構的協作類型應用程序同樣有很大的影響。
象上面例子所顯示的一樣,你使用一個API如Muse或JabberBeans在少許幾行Java代碼中就能夠完成即時消息功能。記住我不能掩蓋一些Jabber其它重要的特徵,如現場服務和登記表管理,這些在使用時都是相關的。另一個重要的特徵是Jabber伺服器的模塊性和可擴展性,它允許一個開發者創建新的服務直接整合進伺服器。

http://wiki.jabbercn.org/space/start

閱讀全文

與im伺服器如何編寫相關的資料

熱點內容
如何用python做趨勢圖 瀏覽:501
伺服器408超時怎麼解決 瀏覽:989
php中數組的寫法 瀏覽:371
ssf33演算法 瀏覽:992
單片機紅外編碼程序 瀏覽:378
雲伺服器如何與本地計算機組區域網 瀏覽:956
51單片機快捷編程 瀏覽:465
siriapp建議為什麼有的app消不掉 瀏覽:314
怎麼打開vivo手機安裝應用加密 瀏覽:158
加密晶元為什麼要隨機數 瀏覽:930
看美劇下載什麼app 瀏覽:516
net命令行參數 瀏覽:592
pdf轉曲工具 瀏覽:818
phpfpm是否安裝 瀏覽:599
久保田壓縮機皮帶 瀏覽:669
飛魚星路由器加密演算法 瀏覽:507
易語言如何入侵手機app伺服器 瀏覽:638
安卓手機訂閱自動扣款怎麼關閉 瀏覽:319
監控視頻加密怎麼解鎖 瀏覽:532
pythonexe界面 瀏覽:361