mboost-dp1
Chat/forum i asp.net C#
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Jeg er stadig igang med mit spil og skal bruge noget chatfunktion.
Jeg vil have forskellige kanaler, f.eks. til open lobby, specific game lobby og ingame.
Hver sted skal der gemmes chat for x antal linjer.
Pt. har jeg en løsning med en stringList som startes i appCode og derefter udfyldes. Dette er kun til en channel, men metoden kan udvides.
For hvert chatindlæg testes længden af listen og hvis den er over threshold bliver den kortet ned indtil den igen er over threshold.
Jeg overvejer at smide chatten ind i en DB, pros/cons?
Jeg vil gerne have at chatten opdateres løbende, lidt ligesom forumindlæg på newz gør det. Jeg har forsøgt et updatepanel og en timer som trigger en update af chatlisten, men den refresher hele siden og fjerner fokus fra det man var igang med. Dette er selvsagt ikke optimalt hvis man f.eks. er igang med at skrive noget. Er der mig der bruger updatepanel forkert eller skal jeg have gang i noget andet funktionalitet?
Jeg vil have forskellige kanaler, f.eks. til open lobby, specific game lobby og ingame.
Hver sted skal der gemmes chat for x antal linjer.
Pt. har jeg en løsning med en stringList som startes i appCode og derefter udfyldes. Dette er kun til en channel, men metoden kan udvides.
For hvert chatindlæg testes længden af listen og hvis den er over threshold bliver den kortet ned indtil den igen er over threshold.
Jeg overvejer at smide chatten ind i en DB, pros/cons?
Jeg vil gerne have at chatten opdateres løbende, lidt ligesom forumindlæg på newz gør det. Jeg har forsøgt et updatepanel og en timer som trigger en update af chatlisten, men den refresher hele siden og fjerner fokus fra det man var igang med. Dette er selvsagt ikke optimalt hvis man f.eks. er igang med at skrive noget. Er der mig der bruger updatepanel forkert eller skal jeg have gang i noget andet funktionalitet?
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div id="ChatText" style="width: 640px; height: 240px; overflow: auto;">
<asp:BulletedList ID="BulletedList1" runat="server">
</asp:BulletedList>
</div>
<br />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="BulletedList1" EventName="TextChanged" />
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
</Triggers>
</asp:UpdatePanel>
private void _UpdateChatMessageList()
{
BulletedList1.DataSource = chatL.getMessages();
BulletedList1.DataBind();
}
Du har fået at vide at det er mission hopelessness at udvikle kommunikation via. at A skriver til et medie, og B så læser på dette medie hver n sekund, ikke?
Fordi det er en utrolig dårlig løsning, som er sygt performanceskrævende.
Hvis du vil lave et spil, eller en chat, fix din egen server, og skrive en ordenlig client/server løsning.
Fordi det er en utrolig dårlig løsning, som er sygt performanceskrævende.
Hvis du vil lave et spil, eller en chat, fix din egen server, og skrive en ordenlig client/server løsning.
#3
De benytter en client/server løsning, hvor de har en explicit server kørende til formålet.
icq2go er en Java Applet som kobler op mod et allerede eksisterende netværk, det er ligesom at have en Java IRC client kørende.
Du bør opnå en forståelse for hvad client-server er før du fortsætter med dit projekt, det er dumt at kode noget uden at have den nødvendige grundlæggende baggrundsviden.
http://en.wikipedia.org/wiki/Client_server
De benytter en client/server løsning, hvor de har en explicit server kørende til formålet.
icq2go er en Java Applet som kobler op mod et allerede eksisterende netværk, det er ligesom at have en Java IRC client kørende.
Du bør opnå en forståelse for hvad client-server er før du fortsætter med dit projekt, det er dumt at kode noget uden at have den nødvendige grundlæggende baggrundsviden.
http://en.wikipedia.org/wiki/Client_server
Allright, jeg har ikke mulighed for at sætte en dedikeret chatserver op.
Jeg har altså kun mulighed for at bruge webserveren og evt. dennes DB. Jeg kan altså ikke bruge en client/server løsning og skal få det bedste ud af det jeg har.
Ud af de to dårlige løsninger med enten en global stringlist eller en DB løsning, hvilken vil så være mindst værst?
Hvordan får jeg chatten til at opdatere løbende, som den gør i newz? - Bruger jeg mit updatepanel forkert? Skal jeg ud i noget javascript?
Hvis det strider mod din fornuft, at jeg kan lave dette chat-system, kan du måske se det som et forum med en lidt højere opdateringsfrekvens? (Eller bliver forums også styret client/server med en dedikeret server) :D
Tak for input so far.
Jeg har altså kun mulighed for at bruge webserveren og evt. dennes DB. Jeg kan altså ikke bruge en client/server løsning og skal få det bedste ud af det jeg har.
Ud af de to dårlige løsninger med enten en global stringlist eller en DB løsning, hvilken vil så være mindst værst?
Hvordan får jeg chatten til at opdatere løbende, som den gør i newz? - Bruger jeg mit updatepanel forkert? Skal jeg ud i noget javascript?
Hvis det strider mod din fornuft, at jeg kan lave dette chat-system, kan du måske se det som et forum med en lidt højere opdateringsfrekvens? (Eller bliver forums også styret client/server med en dedikeret server) :D
Tak for input so far.
#5
Du kan evt. tage et kig på jQuery, det er utroligt nemt at arbejde med og der en masse turtorials der helt sikkert kan hjælpe dig på www.jquery.com
Du kan evt. tage et kig på jQuery, det er utroligt nemt at arbejde med og der en masse turtorials der helt sikkert kan hjælpe dig på www.jquery.com
#design
Hvor mangere brugere skal den chat understøtte?
Hvis den skal have rigtigt mange brugere så er der kun 2 gode løsninger:
1) ægte push - hvilket kræver noget på client der kan læse fra en socket - f.eks. en Java applet (men jeg vil tror at Flash og SilverLight også kan løse opgaven)
2) long poll med en server som ikke bruger en OS tråd per request der er under behandling (dem er der ikke mange af!)
Almindelig poll drukner serveren i requests.
Og long poll på en traditionel server drukner serveren i tråde.
Men hvis du kun skal undestøtte et begrænset antal bruge, så kan alt jo bruges.
En ganske almindelig timed refresh a la newz.dk kan så fint løse opgaven.
Jeg vil ikke poste JavaScript kode til det - jeg kunne blive sagsøgt for alvorlige personskader af de læsere som faldt ned af stolen af chok, når de så min JavaScript.
Hvor mangere brugere skal den chat understøtte?
Hvis den skal have rigtigt mange brugere så er der kun 2 gode løsninger:
1) ægte push - hvilket kræver noget på client der kan læse fra en socket - f.eks. en Java applet (men jeg vil tror at Flash og SilverLight også kan løse opgaven)
2) long poll med en server som ikke bruger en OS tråd per request der er under behandling (dem er der ikke mange af!)
Almindelig poll drukner serveren i requests.
Og long poll på en traditionel server drukner serveren i tråde.
Men hvis du kun skal undestøtte et begrænset antal bruge, så kan alt jo bruges.
En ganske almindelig timed refresh a la newz.dk kan så fint løse opgaven.
Jeg vil ikke poste JavaScript kode til det - jeg kunne blive sagsøgt for alvorlige personskader af de læsere som faldt ned af stolen af chok, når de så min JavaScript.
#6
Tak, det ser brugbart ud.
#7
Det bliver et begrænset antal bruger, under 100. Det har hele tiden været med i overvejelserne sammen med at jeg vil undgå at brugeren skal bruge plugins som Flash eller Silverlight. Det skal gerne kunne køre på maskiner som er begrænset af f.eks. skole eller arbejds maskine restriktioner. Derfor mener jeg at jeg kan slippe afsted med en ren poll model.
Er der nogen holdning til om jeg skal bruge en global variabel eller bruge min DB til chatten?
Tak, det ser brugbart ud.
#7
Det bliver et begrænset antal bruger, under 100. Det har hele tiden været med i overvejelserne sammen med at jeg vil undgå at brugeren skal bruge plugins som Flash eller Silverlight. Det skal gerne kunne køre på maskiner som er begrænset af f.eks. skole eller arbejds maskine restriktioner. Derfor mener jeg at jeg kan slippe afsted med en ren poll model.
Er der nogen holdning til om jeg skal bruge en global variabel eller bruge min DB til chatten?
Når man ser bort fra at det er en dårlig løsning, hvilken af nedenstående vil så være bedst?
En table til alle chat channels.
Kolonner: Timestamp(PRI), Message, Sender, Channel
En table for hver channel.
Kolonner: Timestamp(PRI), Message, Sender
Enten får jeg en meget stor table, som skal gennemsøges for den relevante channel - kunne gøres med views, men vil det reelt optimere det, når der hele tiden kommer nye messages?
Ellers får jeg nogle flere tables, men som man ikke skal gennemsøge, da de altid vil være sorteret og blot skal returnere hele tablet.
Fordelen ved timestamp som primary key er at jeg kan slette gamle beskeder uden at skulle omsortere min table(antaget at den er sorteret efter primary key).
Den sidste løsning vil selvfølgelig medføre at jeg skal oprette og slette tables, er dette forbundet med stort overhead?
En table til alle chat channels.
Kolonner: Timestamp(PRI), Message, Sender, Channel
En table for hver channel.
Kolonner: Timestamp(PRI), Message, Sender
Enten får jeg en meget stor table, som skal gennemsøges for den relevante channel - kunne gøres med views, men vil det reelt optimere det, når der hele tiden kommer nye messages?
Ellers får jeg nogle flere tables, men som man ikke skal gennemsøge, da de altid vil være sorteret og blot skal returnere hele tablet.
Fordelen ved timestamp som primary key er at jeg kan slette gamle beskeder uden at skulle omsortere min table(antaget at den er sorteret efter primary key).
Den sidste løsning vil selvfølgelig medføre at jeg skal oprette og slette tables, er dette forbundet med stort overhead?
Jeg ville gerne holde det hele, så det kan hentes igen efter et evt. crash. Desuden ville jeg muligvis gerne gemme chatten pr. spil, således at hvis et spil bliver afbrudt vil man også se chatten, når man genoptager det.
Skal jeg vælge en stor eller flere mindre tables? Er der stort overhead ved at oprette og nedbryde tables?
Skal jeg vælge en stor eller flere mindre tables? Er der stort overhead ved at oprette og nedbryde tables?
moveax1ret (20) skrev:nej
aargh, lol. Det går ikke så godt for min webudvikler debut :D
#21
Havde kigget lidt på indexes, men som Windscape bliver ved med at fastholde, så er det en dårlig ide og praksis at polle webserveren, så jeg tror jeg må vente med det chat og fokusere på selve spillet og lobbyen.
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.