Comments (5)
We've known about this for since roughly around the time chihaya/bencode#2 was posted.
Bencode is performance-critical to the HTTP frontend, so I'm hesitant to add the sort unless you know of broken clients/behavior that are caused by the nondeterminism. This focus on performance and cutting out unnecessary functionality is why we use our own bencode implementation.
from chihaya.
Hi, thanks for the quick response! It's good to hear you're aware of the issue, unfortunately it did not turn up in my quick search.
I initially noticed this, because BitTornado (the Python library) was crashing/throwing exceptions regarding invalid bencoded data, so there's at least one client having trouble with keys not being in-order.
I honestly didn't really consider performance while writing the fix, since most (all) of the dicts in often-occurring messages (i.e. responses to announce messages) only have in the order of magnitude about 4 or 5 keys (interval, min_interval, peers). But then again, I didn't do any benchmarks, so it's just a hunch.
All in all, I think complying to the spec is in itself valuable. If this impacts performance too much, maybe the interface could be switched from a "Dict" to a slice of (Key, Value) tuples? That would move the responsibility of sorting the keys to the part of code where the response is generated. Of course that would require a much bigger change in the code.
from chihaya.
There are some cases where the dict can potentially be very large
chihaya/frontend/http/writer.go
Lines 75 to 86 in e7f43ee
I agree that the best way would be to construct the dicts in order, to avoid creating another copy of keys and sorting later. However, I also agree that in practise it's probably not much of a problem to just do the sort when marshalling. A benchmark would definitely be the important deciding factor here.
from chihaya.
I am running this patch in production and we will see if there is some performance issue with this or not.
from chihaya.
Performance of this patch is not making me scream, so if it is unoptimized... the optimized solution will be fine.
from chihaya.
Related Issues (20)
- Explore serving UDP without standard lib HOT 3
- Explore using freecache for memory storage HOT 1
- Chihaya has reached a GoLang Limitation: concurrent operations on a single file or socket HOT 8
- Load config from dotfiles & create default config HOT 4
- Migrate chat off freenode HOT 2
- Explore replacing net.IP with inet.af/netaddr.IP HOT 2
- Explore using shoco for peer compression HOT 2
- Generational Garbage Collection
- State of Chihaya? No release since 2016? Will a new release be published? HOT 3
- Adopt goreleaser
- Change storage interface to take a slice of peers as input
- Does chihaya not support redis cluster mode? HOT 2
- How to read metrics number? HOT 2
- Explore garbage collection using golang.org/x/exp/maps
- How to connect to redis with unix domain socket? HOT 2
- Ideas regarding limiting concurrency and reducing allocations
- Data Race in UDP Frontend
- Use cases for peer-to-peer cloud software deployments HOT 3
- Investigate zeropool
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 chihaya.