Comments (2)
Hello,
I believe the map usage is always run in the same goroutine, which uses channels to receive actions from the http goroutintes. This is the subscription manager's run() function running in it's own goroutine.
See:
Line 282 in 72ba13b
go subManager.run()
Where the run function has:
Line 531 in 72ba13b
select {
case newClient := <-sm.clientSubscriptions:
sm.handleNewClient(newClient)
sm.seeIfTimeToPurgeStaleCategories()
case disconnected := <-sm.ClientTimeouts:
sm.handleClientDisconnect(disconnected)
sm.seeIfTimeToPurgeStaleCategories()
case event := <-sm.Events:
// Optional hook on publish
if sm.AddOn != nil {
sm.AddOn.OnPublish(event)
}
sm.handleNewEvent(event)
sm.seeIfTimeToPurgeStaleCategories()
Then, when other goroutines handling HTTP need to tell the subscription manager about a new client, a new event, or a disconnect, they send data to the manager via channels which are concurrent-safe.
for example:
sending new subscription over channel to run():
Line 444 in 72ba13b
client disconnect:
Line 474 in 72ba13b
event publish:
Line 90 in 72ba13b
Conversely, the manager's goroutine will send data back to clients via channels:
Line 619 in 72ba13b
If you see any code that is accessing maps across multiple goroutines, or if you have encountered any errors, please point them out and I will try to fix them. But I think all map access is limited to the manager's run() goroutine and the functions called by run() which are still within the same goroutine. All cross-go-routine sharing of data is done via channels.
from golongpoll.
Thanks for so rich reply, get it 💯
from golongpoll.
Related Issues (20)
- add data backend for scaling and data persistence support HOT 2
- Listen on multiple categories HOT 1
- Do you have an example on how to create a reliable http client to consume golongpoll?
- Offer an "official" Golang client HOT 2
- High CPU load? HOT 5
- client js HOT 3
- Events published in same millisecond aren't seen by clients HOT 3
- Please replace deprecated CloseNotify with Context().Done() HOT 3
- question: version migration guide HOT 2
- Gin framework support HOT 7
- multiple replicas problem HOT 4
- Acks every 15 seconds HOT 1
- hi,how to custom SubscriptionHandler and PublishHandler ?
- Go Mistake #76: time.After and memory leaks
- Handler keeps on waiting for a timeout even though the client has been disconnected. HOT 5
- question about Http Server integration HOT 5
- Latest tag name seems like a typo - messes up SemVer HOT 2
- used in production? HOT 1
- Example of scaling this ? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from golongpoll.